--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
sbapp/sideband/core.py 9e636de5b17a8d48ccb9f7caff7ba9c0bee2ca44 (9e636de5) Text, 255.22 KB
Tff7b72import T7ee787RNS
Tff7b72import T7ee787LXMF
Tff7b72import T7ee787threading
Tff7b72import T7ee787osT7ee787.T7ee787path
Tff7b72import T7ee787time
Tff7b72import T7ee787struct
Tff7b72import T7ee787sqlite3
Tff7b72import T7ee787random
Tff7b72import T7ee787shlex
Tff7b72import T7ee787re
Tff7b72import T7ee787gc
Tff7b72import T7ee787RNST7ee787.T7ee787vendorT7ee787.T7ee787umsgpack Tff7b72as T7ee787msgpack
Tff7b72import T7ee787RNST7ee787.T7ee787InterfacesT7ee787.T7ee787Interface Tff7b72as T7ee787Interface
Tff7b72from T7ee787LXMF Tff7b72import Te6edf3pn_announce_data_is_valid
Tff7b72import T7ee787multiprocessingT7ee787.T7ee787connection
Tff7b72from T7ee787copy Tff7b72import Te6edf3deepcopy
Tff7b72from T7ee787threading Tff7b72import Te6edf3Lock
Tff7b72from T7ee787collections Tff7b72import Te6edf3deque
Tff7b72from T7ee787.T7ee787res Tff7b72import Te6edf3sideband_fb_data
Tff7b72from T7ee787.T7ee787sense Tff7b72import Te6edf3TelemeterTb4b4b4, Te6edf3Commands
Tff7b72from T7ee787.T7ee787plugins Tff7b72import Te6edf3SidebandCommandPluginTb4b4b4, Te6edf3SidebandServicePluginTb4b4b4, Te6edf3SidebandTelemetryPlugin
Tff7b72from T7ee787.T7ee787mqtt Tff7b72import Te6edf3MQTT
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72import T7ee787plyer
Tff7b72from T7ee787jnius Tff7b72import Te6edf3autoclassTb4b4b4, Te6edf3cast
T8b949e# Squelch excessive method signature logging
Tff7b72import T7ee787jniusT7ee787.T7ee787reflect
Tff7b72class T56d364redirect_logTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffisEnabledForTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3argTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffdebugTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3argTb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ffmodTb4b4b4(Te6edf3methodTb4b4b4, Te6edf3nameTb4b4b4, Te6edf3signatureTb4b4b4)Tb4b4b4:
Tff7b72pass
Te6edf3jniusTff7b72.Td2a8ffreflectTff7b72.Td2a8fflog_method Tff7b72= Te6edf3mod
Te6edf3jniusTff7b72.Td2a8ffreflectTff7b72.Td2a8fflog Tff7b72= Te6edf3redirect_logTb4b4b4(Tb4b4b4)
T8b949e############################################
Tff7b72elseTb4b4b4:
Tff7b72import T7ee787sbappT7ee787.T7ee787plyer Tff7b72as T7ee787plyer
Tff7b72class T56d364PropagationNodeDetectorTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3EMITTED_DELTA_GRACE Tff7b72= T79c0ff300
Te6edf3EMITTED_DELTA_IGNORE Tff7b72= T79c0ff10
Te6edf3aspect_filter Tff7b72= Ta5d6ff"Ta5d6fflxmf.propagationTa5d6ff"
Tff7b72def Td2a8ffreceived_announceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destination_hashTb4b4b4, Te6edf3announced_identityTb4b4b4, Te6edf3app_dataTb4b4b4, Te6edf3announce_packet_hashTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3app_data Tff7b72!= Tff7b72None Tff7b72and Tffa657lenTb4b4b4(Te6edf3app_dataTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72if Te6edf3pn_announce_data_is_validTb4b4b4(Te6edf3app_dataTb4b4b4)Tb4b4b4:
Te6edf3unpacked Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3app_dataTb4b4b4)
Te6edf3node_active Tff7b72= Te6edf3unpackedTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3emitted Tff7b72= Te6edf3unpackedTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3hops Tff7b72= Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhops_toTb4b4b4(Te6edf3destination_hashTb4b4b4)
Te6edf3age Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3emitted
Tff7b72if Te6edf3age Tff7b72< T79c0ff0Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffWarning, propagation node announce emitted in the future, possible timing inconsistency or tampering attempt.Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3age Tff7b72< Tff7b72-T79c0ff1Tff7b72*Te6edf3PropagationNodeDetectorTff7b72.Td2a8ffEMITTED_DELTA_GRACETb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffAnnounce timestamp too far in the future, discarding itTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3age Tff7b72> Tff7b72-T79c0ff1Tff7b72*Te6edf3PropagationNodeDetectorTff7b72.Td2a8ffEMITTED_DELTA_IGNORETb4b4b4:
T8b949e# age = 0
Tff7b72pass
Tff7b72if Tff7b72selfTff7b72.Td2a8ffowner_app Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3stat_endpoint Tff7b72= Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffsideband
Tff7b72elseTb4b4b4:
Te6edf3stat_endpoint Tff7b72= Tff7b72selfTff7b72.Td2a8ffowner
Te6edf3link_stats Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ffrssiTa5d6ff"Tb4b4b4: Te6edf3stat_endpointTff7b72.Td2a8ffreticulumTff7b72.Td2a8ffget_packet_rssiTb4b4b4(Te6edf3announce_packet_hashTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffsnrTa5d6ff"Tb4b4b4: Te6edf3stat_endpointTff7b72.Td2a8ffreticulumTff7b72.Td2a8ffget_packet_snrTb4b4b4(Te6edf3announce_packet_hashTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffqTa5d6ff"Tb4b4b4: Te6edf3stat_endpointTff7b72.Td2a8ffreticulumTff7b72.Td2a8ffget_packet_qTb4b4b4(Te6edf3announce_packet_hashTb4b4b4)Tb4b4b4}
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDetected active propagation node Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3destination_hashTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff emission Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3ageTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff seconds ago, Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3hopsTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff hops awayTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4)
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8fflog_announceTb4b4b4(Te6edf3destination_hashTb4b4b4, Te6edf3app_dataTb4b4b4, Te6edf3dest_typeTff7b72=Te6edf3PropagationNodeDetectorTff7b72.Td2a8ffaspect_filterTb4b4b4, Te6edf3link_statsTff7b72=Te6edf3link_statsTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_propagation_nodeTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffactive_propagation_node Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffset_active_propagation_nodeTb4b4b4(Te6edf3destination_hashTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3prev_hops Tff7b72= Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhops_toTb4b4b4(Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffactive_propagation_nodeTb4b4b4)
Tff7b72if Te6edf3hops Tff7b72<Tff7b72= Te6edf3prev_hopsTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffset_active_propagation_nodeTb4b4b4(Te6edf3destination_hashTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72pass
Tff7b72elseTb4b4b4:
Tff7b72pass
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffReceived malformed propagation node announce from Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3destination_hashTb4b4b4)Tffd700}Ta5d6ff with data: Tffd700{Te6edf3app_dataTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffReceived malformed propagation node announce from Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3destination_hashTb4b4b4)Tffd700}Ta5d6ff with data: Tffd700{Te6edf3app_dataTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while processing received propagation node announce: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3ownerTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffowner Tff7b72= Te6edf3owner
Tff7b72selfTff7b72.Td2a8ffowner_app Tff7b72= Te6edf3ownerTff7b72.Td2a8ffowner_app
Tff7b72class T56d364SidebandCoreTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3CONV_P2P Tff7b72= T79c0ff0x01
Te6edf3CONV_GROUP Tff7b72= T79c0ff0x02
Te6edf3CONV_BROADCAST Tff7b72= T79c0ff0x03
Te6edf3CONV_VOICE Tff7b72= T79c0ff0x04
Te6edf3MAX_ANNOUNCES Tff7b72= T79c0ff24
Te6edf3SERVICE_JOB_INTERVAL Tff7b72= T79c0ff1
Te6edf3PERIODIC_JOBS_INTERVAL Tff7b72= T79c0ff60
Te6edf3PERIODIC_SYNC_RETRY Tff7b72= T79c0ff360
Te6edf3TELEMETRY_KEEP Tff7b72= T79c0ff60Tff7b72*T79c0ff60Tff7b72*T79c0ff24Tff7b72*T79c0ff7
Te6edf3TELEMETRY_INTERVAL Tff7b72= T79c0ff60
Te6edf3SERVICE_TELEMETRY_INTERVAL Tff7b72= T79c0ff300
Te6edf3TELEMETRY_CLEAN_INTERVAL Tff7b72= T79c0ff3600
Te6edf3IF_CHANGE_ANNOUNCE_MIN_INTERVAL Tff7b72= T79c0ff3.5 T8b949e# In seconds
Te6edf3AUTO_ANNOUNCE_RANDOM_MIN Tff7b72= T79c0ff90 T8b949e# In minutes
Te6edf3AUTO_ANNOUNCE_RANDOM_MAX Tff7b72= T79c0ff300 T8b949e# In minutes
Te6edf3DEFAULT_APPEARANCE Tff7b72= Tb4b4b4[Ta5d6ff"Ta5d6ffaccountTa5d6ff"Tb4b4b4, Tb4b4b4[T79c0ff0Tb4b4b4,T79c0ff0Tb4b4b4,T79c0ff0Tb4b4b4,T79c0ff1Tb4b4b4]Tb4b4b4, Tb4b4b4[T79c0ff1Tb4b4b4,T79c0ff1Tb4b4b4,T79c0ff1Tb4b4b4,T79c0ff1Tb4b4b4]Tb4b4b4]
Te6edf3LOG_DEQUE_MAXLEN Tff7b72= T79c0ff128
Te6edf3aspect_filter Tff7b72= Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"
Tff7b72def Td2a8ffreceived_announceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destination_hashTb4b4b4, Te6edf3announced_identityTb4b4b4, Te6edf3app_dataTb4b4b4, Te6edf3announce_packet_hashTb4b4b4)Tb4b4b4:
T8b949e# Add the announce to the directory announce
T8b949e# stream logger
Tff7b72if Tff7b72selfTff7b72.Td2a8ffreticulum Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3link_stats Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ffrssiTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffreticulumTff7b72.Td2a8ffget_packet_rssiTb4b4b4(Te6edf3announce_packet_hashTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffsnrTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffreticulumTff7b72.Td2a8ffget_packet_snrTb4b4b4(Te6edf3announce_packet_hashTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffqTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffreticulumTff7b72.Td2a8ffget_packet_qTb4b4b4(Te6edf3announce_packet_hashTb4b4b4)Tb4b4b4}
T8b949e# This reformats the new v0.5.0 announce data back to the expected format
T8b949e# for Sidebands database and other handling functions.
Te6edf3dn Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffdisplay_name_from_app_dataTb4b4b4(Te6edf3app_dataTb4b4b4)
Te6edf3sc Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffstamp_cost_from_app_dataTb4b4b4(Te6edf3app_dataTb4b4b4)
Te6edf3app_data Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ff"
Tff7b72if Te6edf3dn Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3app_data Tff7b72= Te6edf3dnTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflog_announceTb4b4b4(Te6edf3destination_hashTb4b4b4, Te6edf3app_dataTb4b4b4, Te6edf3dest_typeTff7b72=Te6edf3SidebandCoreTff7b72.Td2a8ffaspect_filterTb4b4b4, Te6edf3stamp_costTff7b72=Te6edf3scTb4b4b4, Te6edf3link_statsTff7b72=Te6edf3link_statsTb4b4b4)
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3owner_appTb4b4b4, Te6edf3config_path Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3is_serviceTff7b72=Tff7b72FalseTb4b4b4, Te6edf3is_clientTff7b72=Tff7b72FalseTb4b4b4, Te6edf3android_app_dirTff7b72=Tff7b72NoneTb4b4b4, Te6edf3verboseTff7b72=Tff7b72FalseTb4b4b4, Te6edf3quietTff7b72=Tff7b72FalseTb4b4b4, Te6edf3owner_serviceTff7b72=Tff7b72NoneTb4b4b4, Te6edf3service_contextTff7b72=Tff7b72NoneTb4b4b4, Te6edf3is_daemonTff7b72=Tff7b72FalseTb4b4b4, Te6edf3load_config_onlyTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffis_service Tff7b72= Te6edf3is_service
Tff7b72selfTff7b72.Td2a8ffis_client Tff7b72= Te6edf3is_client
Tff7b72selfTff7b72.Td2a8ffis_daemon Tff7b72= Te6edf3is_daemon
Tff7b72selfTff7b72.Td2a8ffmsg_audio Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fflast_msg_audio Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffptt_playback_lock Tff7b72= Te6edf3threadingTff7b72.Td2a8ffLockTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffui_recording Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffdb Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffdb_lock Tff7b72= Te6edf3threadingTff7b72.Td2a8ffLockTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffis_service Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffis_standalone Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffis_standalone Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8fflog_verbose Tff7b72= Tb4b4b4(Te6edf3verbose Tff7b72and Tff7b72not Te6edf3quietTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflog_quiet Tff7b72= Te6edf3quiet
Tff7b72selfTff7b72.Td2a8fflog_deque Tff7b72= Te6edf3dequeTb4b4b4(Te6edf3maxlenTff7b72=Tff7b72selfTff7b72.Td2a8ffLOG_DEQUE_MAXLENTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffowner_app Tff7b72= Te6edf3owner_app
Tff7b72selfTff7b72.Td2a8ffreticulum Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffwebshare_server Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffvoice_running Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8fftelephone Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fftelemeter Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fftelemetry_running Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8fflatest_telemetry Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fflatest_packed_telemetry Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fftelemetry_changes Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffpending_telemetry_send Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffpending_telemetry_send_try Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffpending_telemetry_send_maxtries Tff7b72= T79c0ff2
Tff7b72selfTff7b72.Td2a8fftelemetry_send_blocked_until Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8fftelemetry_clean_interval Tff7b72= Tff7b72selfTff7b72.Td2a8ffTELEMETRY_CLEAN_INTERVAL
Tff7b72selfTff7b72.Td2a8fflast_telemetry_clean Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffpending_telemetry_request Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8fftelemetry_request_max_history Tff7b72= T79c0ff7Tff7b72*T79c0ff24Tff7b72*T79c0ff60Tff7b72*T79c0ff60
Tff7b72selfTff7b72.Td2a8fflive_tracked_objects Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffdefault_lxm_limit Tff7b72= T79c0ff128Tff7b72*T79c0ff1000
Tff7b72selfTff7b72.Td2a8ffstate_db Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffstate_lock Tff7b72= Te6edf3LockTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmessage_router Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffrpc_connection Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffrpc_lock Tff7b72= Te6edf3LockTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffservice_stopped Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffservice_context Tff7b72= Te6edf3service_context
Tff7b72selfTff7b72.Td2a8ffowner_service Tff7b72= Te6edf3owner_service
Tff7b72selfTff7b72.Td2a8ffallow_service_dispatch Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffversion_str Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfig_template Tff7b72= Te6edf3rns_config
Tff7b72selfTff7b72.Td2a8ffdefault_config_template Tff7b72= Te6edf3rns_config
Tff7b72if Te6edf3config_path Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp_dir Tff7b72= Te6edf3plyerTff7b72.Td2a8ffstoragepathTff7b72.Td2a8ffget_home_dirTb4b4b4(Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff/.config/sidebandTa5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6fffile://Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6fffile://Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp_dir Tff7b72= Te6edf3config_path
Tff7b72selfTff7b72.Td2a8ffcache_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/cacheTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrns_configdir Tff7b72= Tff7b72None
Te6edf3core_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffabspathTb4b4b4(Tff7b72__file__Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffcore.pycTa5d6ff" Tff7b72in Te6edf3core_pathTb4b4b4:
Te6edf3core_path Tff7b72= Te6edf3core_pathTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ffcore.pycTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffcore.pyTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp_dir Tff7b72= Te6edf3android_app_dirTff7b72+Ta5d6ff"Ta5d6ff/io.unsigned.sideband/files/Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffcache_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/cacheTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrns_configdir Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app_storage/reticulumTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffasset_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app/assetsTa5d6ff"
Tff7b72elif Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_darwinTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffasset_dir Tff7b72= Te6edf3core_pathTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff/sideband/core.pyTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/assetsTa5d6ff"Tb4b4b4)
Tff7b72elif Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6fflinuxTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffasset_dir Tff7b72= Te6edf3core_pathTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff/sideband/core.pyTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/assetsTa5d6ff"Tb4b4b4)
Tff7b72elif Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_windowsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffasset_dir Tff7b72= Te6edf3core_pathTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Tffea00\\Ta5d6ffsidebandTffea00\\Ta5d6ffcore.pyTa5d6ff"Tb4b4b4, Ta5d6ff"Tffea00\\Ta5d6ffassetsTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffasset_dir Tff7b72= Te6edf3plyerTff7b72.Td2a8ffstoragepathTff7b72.Td2a8ffget_application_dirTb4b4b4(Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff/sbapp/assetsTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffmap_cache Tff7b72= Tff7b72selfTff7b72.Td2a8ffcache_dirTff7b72+Ta5d6ff"Ta5d6ff/mapsTa5d6ff"
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmap_cacheTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmap_cacheTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrec_cache Tff7b72= Tff7b72selfTff7b72.Td2a8ffcache_dirTff7b72+Ta5d6ff"Ta5d6ff/recTa5d6ff"
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrec_cacheTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrec_cacheTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffshare_cache Tff7b72= Tff7b72selfTff7b72.Td2a8ffcache_dirTff7b72+Ta5d6ff"Ta5d6ff/shareTa5d6ff"
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffshare_cacheTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Tff7b72selfTff7b72.Td2a8ffshare_cacheTb4b4b4)
Tff7b72selfTff7b72.Td2a8fficon Tff7b72= Tff7b72selfTff7b72.Td2a8ffasset_dirTff7b72+Ta5d6ff"Ta5d6ff/icon.pngTa5d6ff"
Tff7b72selfTff7b72.Td2a8fficon_48 Tff7b72= Tff7b72selfTff7b72.Td2a8ffasset_dirTff7b72+Ta5d6ff"Ta5d6ff/icon_48.pngTa5d6ff"
Tff7b72selfTff7b72.Td2a8fficon_32 Tff7b72= Tff7b72selfTff7b72.Td2a8ffasset_dirTff7b72+Ta5d6ff"Ta5d6ff/icon_32.pngTa5d6ff"
Tff7b72selfTff7b72.Td2a8fficon_macos Tff7b72= Tff7b72selfTff7b72.Td2a8ffasset_dirTff7b72+Ta5d6ff"Ta5d6ff/icon_macos.pngTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffnotification_icon Tff7b72= Tff7b72selfTff7b72.Td2a8ffasset_dirTff7b72+Ta5d6ff"Ta5d6ff/notification_icon.pngTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffnotif_icon_black Tff7b72= Tff7b72selfTff7b72.Td2a8ffasset_dirTff7b72+Ta5d6ff"Ta5d6ff/notification_icon_black.pngTa5d6ff"
Te6edf3osTff7b72.Td2a8ffenvironTb4b4b4[Ta5d6ff"Ta5d6ffTELEMETER_GEOID_PATHTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffasset_dirTb4b4b4, Ta5d6ff"Ta5d6ffgeoidsTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app_storageTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app_storageTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffconfig_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app_storage/sideband_configTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffidentity_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app_storage/primary_identityTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffdb_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app_storage/sideband.dbTa5d6ff"
Tff7b72selfTff7b72.Td2a8fflxmf_storage Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app_storage/Ta5d6ff"
Tff7b72selfTff7b72.Td2a8fflog_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app_storage/Ta5d6ff"
Tff7b72selfTff7b72.Td2a8fftmp_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app_storage/tmpTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffexports_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/exportsTa5d6ff"
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwebshare_dir Tff7b72= Ta5d6ff"Ta5d6ff./share/Ta5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3sideband_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffdirnameTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffabspathTb4b4b4(Tff7b72__file__Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwebshare_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffabspathTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3sideband_dirTb4b4b4, Ta5d6ff"Ta5d6ff..Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffshareTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwebshare_ssl_key_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app_storage/ssl_key.pemTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffwebshare_ssl_cert_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app_storage/ssl_cert.pemTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffmqtt Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffmqtt_handle_lock Tff7b72= Te6edf3threadingTff7b72.Td2a8ffLockTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fffirst_run Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffsaving_configuration Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8fflast_lxmf_announce Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8fflast_if_change_announce Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffinterface_local_adding Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffinterface_rnode_adding Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffnext_auto_announce Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72+ T79c0ff60Tff7b72*Tb4b4b4(Te6edf3randomTff7b72.Td2a8ffrandomTb4b4b4(Tb4b4b4)Tff7b72*Tb4b4b4(Te6edf3SidebandCoreTff7b72.Td2a8ffAUTO_ANNOUNCE_RANDOM_MAXTff7b72-Te6edf3SidebandCoreTff7b72.Td2a8ffAUTO_ANNOUNCE_RANDOM_MINTb4b4b4)Tff7b72+Te6edf3SidebandCoreTff7b72.Td2a8ffAUTO_ANNOUNCE_RANDOM_MINTb4b4b4)
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfig_pathTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__init_configTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__load_configTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__load_configTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__init_configTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__load_configTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fffirst_run Tff7b72= Tff7b72False
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdebugTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fflog_verbose Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Tff7b72selfTff7b72.Td2a8fftmp_dirTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Tff7b72selfTff7b72.Td2a8fftmp_dirTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclear_tmp_dirTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffexports_dirTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclear_exports_dirTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while configuring Sideband: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72if Te6edf3load_config_onlyTb4b4b4:
Tff7b72return
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconfig_templateTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrns_configdirTff7b72+Ta5d6ff"Ta5d6ff/config_template_invalidTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrns_configdirTff7b72+Ta5d6ff"Ta5d6ff/config_template_invalidTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3invalidation_fileTb4b4b4:
Te6edf3invalidation_fileTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4)
Te6edf3ct Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconfig_templateTa5d6ff"Tb4b4b4]
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffLoading modified RNS config templateTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffconfig_template Tff7b72= Te6edf3ct
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCustom configuration template invalid, using default configuration templateTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffconfig_template Tff7b72= Te6edf3rns_config
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffhardware_operation.errorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffAt the previous start, Sideband could not initialise Reticulum. Custom configuration template loading has been temporarily disabled. Please check and fix any errors in your configuration template.Ta5d6ff"Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffAn error occurred while setting RNS configuration template: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffUsing default configuration templateTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffconfig_template Tff7b72= Te6edf3rns_config
T8b949e# Initialise Reticulum configuration
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrns_configdir Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dirTff7b72+Ta5d6ff"Ta5d6ff/app_storage/reticulumTa5d6ff"
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrns_configdirTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrns_configdirTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffConfiguring Reticulum instance...Ta5d6ff"Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_transportTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffEnabling Reticulum TransportTa5d6ff"Tb4b4b4)
Te6edf3generated_config Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfig_templateTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ffTRANSPORT_IS_ENABLEDTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffYesTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNot enabling Reticulum TransportTa5d6ff"Tb4b4b4)
Te6edf3generated_config Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfig_templateTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ffTRANSPORT_IS_ENABLEDTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffNoTa5d6ff"Tb4b4b4)
Te6edf3config_file Tff7b72= Tffa657openTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrns_configdirTff7b72+Ta5d6ff"Ta5d6ff/configTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4)
Te6edf3config_fileTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3generated_configTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3config_fileTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while configuring Reticulum instance: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72pass
Tff7b72selfTff7b72.Td2a8ffactive_propagation_node Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffpropagation_detector Tff7b72= Te6edf3PropagationNodeDetectorTb4b4b4(Tff7b72selfTb4b4b4)
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffregister_announce_handlerTb4b4b4(Tff7b72selfTb4b4b4)
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffregister_announce_handlerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpropagation_detectorTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffactive_command_plugins Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffactive_service_plugins Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffactive_telemetry_plugins Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_service Tff7b72or Tff7b72selfTff7b72.Td2a8ffis_standaloneTb4b4b4:
Tff7b72def Td2a8ffload_jobTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__load_pluginsTb4b4b4(Tb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3load_jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_linuxTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffis_daemonTb4b4b4:
Te6edf3lde_level Tff7b72= Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUG
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffChecking desktop integration...Ta5d6ff"Tb4b4b4, Te6edf3lde_levelTb4b4b4)
Te6edf3local_share_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexpanduserTb4b4b4(Ta5d6ff"Ta5d6ff~/.local/shareTa5d6ff"Tb4b4b4)
Te6edf3app_entry_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexpanduserTb4b4b4(Ta5d6ff"Ta5d6ff~/.local/share/applicationsTa5d6ff"Tb4b4b4)
Te6edf3icon_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexpanduserTb4b4b4(Ta5d6ff"Ta5d6ff~/.local/share/icons/hicolor/512x512/appsTa5d6ff"Tb4b4b4)
Te6edf3de_filename Tff7b72= Ta5d6ff"Ta5d6ffio.unsigned.sideband.desktopTa5d6ff"
Te6edf3de_source Tff7b72= Tff7b72selfTff7b72.Td2a8ffasset_dirTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3de_filename
Te6edf3de_target Tff7b72= Te6edf3app_entry_dirTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3de_filename
Te6edf3icn_source Tff7b72= Tff7b72selfTff7b72.Td2a8ffasset_dirTff7b72+Ta5d6ff"Ta5d6ff/icon.pngTa5d6ff"
Te6edf3icn_target Tff7b72= Te6edf3icon_dirTff7b72+Ta5d6ff"Ta5d6ff/io.unsigned.sideband.pngTa5d6ff"
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Te6edf3local_share_dirTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3app_entry_dirTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3app_entry_dirTb4b4b4)
Te6edf3update_de Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3de_targetTb4b4b4)Tb4b4b4:
Te6edf3update_de Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Te6edf3included_de_version Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72with Tffa657openTb4b4b4(Te6edf3de_sourceTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3sde_fileTb4b4b4:
Te6edf3included_de_version Tff7b72= Te6edf3sde_fileTff7b72.Td2a8ffreadlineTb4b4b4(Tb4b4b4)
Te6edf3existing_de_version Tff7b72= Tff7b72None
Tff7b72with Tffa657openTb4b4b4(Te6edf3de_targetTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3de_fileTb4b4b4:
Te6edf3existing_de_version Tff7b72= Te6edf3de_fileTff7b72.Td2a8ffreadlineTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3included_de_version Tff7b72!= Te6edf3existing_de_versionTb4b4b4:
Te6edf3update_de Tff7b72= Tff7b72True
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffExisting desktop entry doesnTa5d6ff'Ta5d6fft match included, updating itTa5d6ff"Tb4b4b4, Te6edf3lde_levelTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3update_de Tff7b72= Tff7b72False
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffExisting desktop entry matches included, not updating itTa5d6ff"Tb4b4b4, Te6edf3lde_levelTb4b4b4)
Tff7b72if Te6edf3update_deTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffSetting up desktop integration...Ta5d6ff"Tb4b4b4, Te6edf3lde_levelTb4b4b4)
Tff7b72import T7ee787shutil
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffInstalling menu entry to Tffea00\"Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3de_targetTb4b4b4)Tff7b72+Ta5d6ff"Tffea00\"Ta5d6ff...Ta5d6ff"Tb4b4b4, Te6edf3lde_levelTb4b4b4)
Te6edf3shutilTff7b72.Td2a8ffcopyTb4b4b4(Te6edf3de_sourceTb4b4b4, Te6edf3de_targetTb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3icon_dirTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3icon_dirTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffInstalling icon to Tffea00\"Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3icn_targetTb4b4b4)Tff7b72+Ta5d6ff"Tffea00\"Ta5d6ff...Ta5d6ff"Tb4b4b4, Te6edf3lde_levelTb4b4b4)
Te6edf3shutilTff7b72.Td2a8ffcopyTb4b4b4(Te6edf3icn_sourceTb4b4b4, Te6edf3icn_targetTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDesktop integration is already set upTa5d6ff"Tb4b4b4, Te6edf3lde_levelTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while setting up desktop integration: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72def Td2a8ffclear_tmp_dirTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Tff7b72selfTff7b72.Td2a8fftmp_dirTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3file Tff7b72in Te6edf3osTff7b72.Td2a8fflistdirTb4b4b4(Tff7b72selfTff7b72.Td2a8fftmp_dirTb4b4b4)Tb4b4b4:
Te6edf3fpath Tff7b72= Tff7b72selfTff7b72.Td2a8fftmp_dirTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3file
Te6edf3osTff7b72.Td2a8ffunlinkTb4b4b4(Te6edf3fpathTb4b4b4)
Tff7b72def Td2a8ffclear_exports_dirTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffexports_dirTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3file Tff7b72in Te6edf3osTff7b72.Td2a8fflistdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffexports_dirTb4b4b4)Tb4b4b4:
Te6edf3fpath Tff7b72= Tff7b72selfTff7b72.Td2a8ffexports_dirTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3file
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffClearing Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3fpathTb4b4b4)Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffunlinkTb4b4b4(Te6edf3fpathTb4b4b4)
Tff7b72def Td2a8ff__init_configTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCreating new Sideband configuration...Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidentity_pathTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffidentity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8fffrom_fileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidentity_pathTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffidentity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffidentityTff7b72.Td2a8ffto_fileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidentity_pathTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffconfig Tff7b72= Tb4b4b4{Tb4b4b4}
T8b949e# Settings
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdebugTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdisplay_nameTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffAnonymous PeerTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffnotifications_onTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdark_uiTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffstart_announceTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffpropagation_by_defaultTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhome_node_as_broadcast_repeaterTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffsend_telemetry_to_home_nodeTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_propagation_nodeTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_sync_limitTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_sync_maxTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff3
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_periodic_syncTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_ignore_unknownTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_sync_intervalTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff43200
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_require_stampsTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_inbound_stamp_costTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflast_lxmf_propagation_nodeTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffnn_home_nodeTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffprint_commandTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fflpTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffeink_modeTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxm_limit_1mbTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftrusted_markup_onlyTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffcompose_in_markdownTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
T8b949e# Connectivity
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_transportTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_localTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_groupidTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcpTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_hostTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffsideband.connect.reticulum.networkTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_portTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff7822Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2pTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_b32Ta5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffpmlm3l5rpympihoy2o5ago43kluei2jjjzsalcuiuylbve3mwi2a.b32.i2pTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_rnodeTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_rnode_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_rnode_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_serialTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_serial_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_serial_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_modemTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_modem_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_modem_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_localTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_tcpTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_i2pTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_rnodeTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_modemTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_serialTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_bluetoothTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
T8b949e# Hardware
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_frequencyTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_modulationTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffLoRaTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bandwidthTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff62500
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_spreading_factorTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff8
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_coding_rateTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff6
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_tx_powerTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_beaconintervalTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_beacondataTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bt_deviceTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bluetoothTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bleTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_baudrateTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff57600
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_databitsTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff8
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_stopbitsTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff1
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_parityTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffnoneTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_preambleTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff150
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_tailTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff20
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_persistenceTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff220
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_slottimeTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff20
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_beaconintervalTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_beacondataTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_baudrateTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff57600
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_databitsTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff8
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_stopbitsTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff1
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_parityTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffnoneTa5d6ff"
T8b949e# Telemetry
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_enabledTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_iconTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3SidebandCoreTff7b72.Td2a8ffDEFAULT_APPEARANCETb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_to_trustedTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_to_collectorTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
T8b949e# Voice
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_enabledTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_outputTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_inputTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_ringerTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdb_pathTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__db_initTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_initstateTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_initpersistentTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_inittelemetryTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_upgradetablesTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__save_configTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffclear_map_cacheTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3entry Tff7b72in Te6edf3osTff7b72.Td2a8ffscandirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmap_cacheTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffunlinkTb4b4b4(Te6edf3entryTff7b72.Td2a8ffpathTb4b4b4)
Tff7b72def Td2a8ffget_map_cache_sizeTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3total Tff7b72= T79c0ff0
Tff7b72for Te6edf3entry Tff7b72in Te6edf3osTff7b72.Td2a8ffscandirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmap_cacheTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3entryTff7b72.Td2a8ffis_dirTb4b4b4(Te6edf3follow_symlinksTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72elseTb4b4b4:
Te6edf3total Tff7b72+Tff7b72= Te6edf3entryTff7b72.Td2a8ffstatTb4b4b4(Te6edf3follow_symlinksTff7b72=Tff7b72FalseTb4b4b4)Tff7b72.Td2a8ffst_size
Tff7b72return Te6edf3total
Tff7b72def Td2a8ffshould_persist_dataTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffreticulum Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffreticulumTff7b72.Td2a8ff_should_persist_dataTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsave_configurationTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff__load_configTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffLoading Sideband identity...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffidentity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8fffrom_fileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidentity_pathTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrpc_addr Tff7b72= Ta5d6fffTa5d6ff"Tffea00\0Ta5d6ffsideband/rpcTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrpc_key Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8fffull_hashTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidentityTff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffLoading Sideband configuration... Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfig_pathTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3config_file Tff7b72= Tffa657openTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfig_pathTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffconfig Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3config_fileTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3config_fileTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
T8b949e# Migration actions from earlier config formats
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffdebugTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdebugTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffdark_uiTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdark_uiTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffadvanced_statsTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffadvanced_statsTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fflxmf_periodic_syncTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_periodic_syncTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fflxmf_ignore_unknownTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_ignore_unknownTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fflxmf_sync_intervalTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_sync_intervalTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff43200
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fflxmf_try_propagation_on_failTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_try_propagation_on_failTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fflxmf_require_stampsTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_require_stampsTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fflxmf_ignore_invalid_stampsTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_ignore_invalid_stampsTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fflxmf_inbound_stamp_costTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_inbound_stamp_costTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffnotifications_onTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffnotifications_onTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffprint_commandTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffprint_commandTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fflpTa5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffeink_modeTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffeink_modeTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffclassic_message_colorsTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffclassic_message_colorsTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffdisplay_style_in_contact_listTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdisplay_style_in_contact_listTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fflxm_limit_1mbTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxm_limit_1mbTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhq_pttTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhq_pttTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftrusted_markup_onlyTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftrusted_markup_onlyTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffcompose_in_markdownTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffcompose_in_markdownTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffinput_languageTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffinput_languageTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffallow_predictive_textTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffallow_predictive_textTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffblock_predictive_textTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffblock_predictive_textTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconfig_templateTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconfig_templateTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_transportTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_transportTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_rnodeTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_rnodeTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_rnode_ifac_netnameTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_rnode_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_rnode_ifac_passphraseTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_rnode_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_serialTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_serialTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_serial_ifac_netnameTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_serial_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_serial_ifac_passphraseTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_serial_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_modemTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_modemTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_modem_ifac_netnameTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_modem_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_modem_ifac_passphraseTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_modem_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_ifmode_localTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_localTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_ifmode_tcpTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_tcpTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_ifmode_i2pTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_i2pTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_ifmode_rnodeTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_rnodeTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_ifmode_modemTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_modemTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_ifmode_serialTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_serialTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffconnect_ifmode_bluetoothTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_bluetoothTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffullTa5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_frequencyTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_frequencyTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_modulationTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_modulationTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffLoRaTa5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_bandwidthTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bandwidthTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff62500
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_spreading_factorTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_spreading_factorTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff8
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_coding_rateTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_coding_rateTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff6
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_tx_powerTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_tx_powerTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff0
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_beaconintervalTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_beaconintervalTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_beacondataTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_beacondataTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_bluetoothTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bluetoothTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_bleTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bleTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_enable_framebufferTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_enable_framebufferTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_bt_deviceTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bt_deviceTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_atl_shortTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_atl_shortTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_rnode_atl_longTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_atl_longTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_modem_baudrateTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_baudrateTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff115200
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_modem_databitsTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_databitsTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff8
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_modem_stopbitsTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_stopbitsTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff1
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_modem_parityTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_parityTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffnoneTa5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_modem_preambleTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_preambleTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff150
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_modem_tailTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_tailTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff20
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_modem_persistenceTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_persistenceTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff220
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_modem_slottimeTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_slottimeTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff20
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_modem_beaconintervalTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_beaconintervalTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_modem_beacondataTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_beacondataTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_serial_baudrateTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_baudrateTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff57600
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_serial_databitsTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_databitsTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff8
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_serial_stopbitsTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_stopbitsTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff1
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffhw_serial_parityTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_parityTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ffnoneTa5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_enabledTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_enabledTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_collectorTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_collectorTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_send_to_trustedTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_to_trustedTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_send_to_collectorTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_to_collectorTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_request_from_collectorTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_request_from_collectorTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_send_intervalTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_intervalTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff43200
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_request_intervalTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_request_intervalTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff43200
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_collector_enabledTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_collector_enabledTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_to_mqttTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_to_mqttTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_mqtt_hostTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_mqtt_hostTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_mqtt_portTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_mqtt_portTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_mqtt_userTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_mqtt_userTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_mqtt_passTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_mqtt_passTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_mqtt_validate_sslTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_mqtt_validate_sslTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_iconTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_iconTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3SidebandCoreTff7b72.Td2a8ffDEFAULT_APPEARANCETb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_fgTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_fgTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3SidebandCoreTff7b72.Td2a8ffDEFAULT_APPEARANCETb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_bgTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_bgTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3SidebandCoreTff7b72.Td2a8ffDEFAULT_APPEARANCETb4b4b4[T79c0ff2Tb4b4b4]
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_send_appearanceTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_appearanceTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_display_trusted_onlyTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_display_trusted_onlyTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffdisplay_style_from_allTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdisplay_style_from_allTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_receive_trusted_onlyTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_receive_trusted_onlyTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_send_all_to_collectorTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_all_to_collectorTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_use_propagation_onlyTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_use_propagation_onlyTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_try_propagation_on_failTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_try_propagation_on_failTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_requests_only_send_latestTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_requests_only_send_latestTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_allow_requests_from_trustedTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_allow_requests_from_trustedTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_allow_requests_from_anyoneTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_allow_requests_from_anyoneTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_locationTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_locationTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_batteryTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_batteryTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_pressureTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_pressureTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_temperatureTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_temperatureTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_humidityTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_humidityTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_magnetic_fieldTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_magnetic_fieldTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_ambient_lightTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_ambient_lightTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_gravityTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_gravityTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_angular_velocityTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_angular_velocityTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_accelerationTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_accelerationTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_proximityTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_proximityTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_rns_transportTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_rns_transportTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_fixed_locationTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_fixed_locationTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_fixed_latlonTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_fixed_latlonTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4[T79c0ff0.0Tb4b4b4, T79c0ff0.0Tb4b4b4]
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_fixed_altitudeTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_fixed_altitudeTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff0.0
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_informationTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_informationTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6fftelemetry_s_information_textTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_information_textTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffservice_plugins_enabledTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffservice_plugins_enabledTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffcommand_plugins_enabledTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffcommand_plugins_enabledTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffcommand_plugins_pathTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffcommand_plugins_pathTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffmap_history_limitTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_history_limitTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff7Tff7b72*T79c0ff24Tff7b72*T79c0ff60Tff7b72*T79c0ff60
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffmap_latTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_latTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff0.0
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffmap_lonTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_lonTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff0.0
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffmap_zoomTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_zoomTa5d6ff"Tb4b4b4] Tff7b72= T79c0ff3
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffmap_storage_externalTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_storage_externalTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffmap_use_offlineTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_use_offlineTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffmap_use_onlineTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_use_onlineTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffmap_layerTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_layerTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffmap_storage_pathTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_storage_pathTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffmap_storage_fileTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_storage_fileTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffvoice_enabledTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_enabledTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffvoice_outputTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_outputTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffvoice_inputTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_inputTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffvoice_ringerTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_ringerTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffvoice_trusted_onlyTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_trusted_onlyTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
T8b949e# Make sure we have a database
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdb_pathTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__db_initTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_initstateTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_initpersistentTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_inittelemetryTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_upgradetablesTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__db_indicesTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff__reload_configTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffReloading Sideband configuration... Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfig_pathTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3config_fileTb4b4b4:
Te6edf3config_data Tff7b72= Te6edf3config_fileTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3unpacked_config Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3config_dataTb4b4b4)
Tff7b72if Te6edf3unpacked_config Tff7b72!= Tff7b72None Tff7b72and Tffa657lenTb4b4b4(Te6edf3unpacked_configTb4b4b4) Tff7b72!= T79c0ff0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfig Tff7b72= Te6edf3unpacked_config
Tff7b72selfTff7b72.Td2a8ffupdate_active_lxmf_propagation_nodeTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_ignore_invalid_stampsTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while reloading configuration: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72def Td2a8ff__save_configTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffSaving Sideband configuration...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72def Td2a8ffsave_functionTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72while Tff7b72selfTff7b72.Td2a8ffsaving_configurationTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.15Tb4b4b4)
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsaving_configuration Tff7b72= Tff7b72True
Tff7b72with Tffa657openTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfig_pathTb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3config_fileTb4b4b4:
Te6edf3config_fileTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsaving_configuration Tff7b72= Tff7b72False
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsaving_configuration Tff7b72= Tff7b72False
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while saving Sideband configuration: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3save_functionTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.settings_reloadTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ff__load_pluginsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3plugins_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffcommand_plugins_pathTa5d6ff"Tb4b4b4]
Te6edf3command_plugins_enabled Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffcommand_plugins_enabledTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72True
Te6edf3service_plugins_enabled Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffservice_plugins_enabledTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72True
Te6edf3plugins_enabled Tff7b72= Te6edf3service_plugins_enabled
Tff7b72if Te6edf3plugins_enabledTb4b4b4:
Tff7b72if Te6edf3plugins_path Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffLoading Sideband plugins...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Te6edf3plugins_pathTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3file Tff7b72in Te6edf3osTff7b72.Td2a8fflistdirTb4b4b4(Te6edf3plugins_pathTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3fileTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6ff.pyTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3plugin_globals Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3plugin_globalsTb4b4b4[Ta5d6ff"Ta5d6ffSidebandServicePluginTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3SidebandServicePlugin
Te6edf3plugin_globalsTb4b4b4[Ta5d6ff"Ta5d6ffSidebandCommandPluginTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3SidebandCommandPlugin
Te6edf3plugin_globalsTb4b4b4[Ta5d6ff"Ta5d6ffSidebandTelemetryPluginTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3SidebandTelemetryPlugin
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffLoading plugin Tffea00\"Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3fileTb4b4b4)Tff7b72+Ta5d6ff"Tffea00\"Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_NOTICETb4b4b4)
Te6edf3plugin_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3plugins_pathTb4b4b4, Te6edf3fileTb4b4b4)
Te6edf3execTb4b4b4(Tffa657openTb4b4b4(Te6edf3plugin_pathTb4b4b4)Tff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3plugin_globalsTb4b4b4)
Te6edf3plugin_class Tff7b72= Te6edf3plugin_globalsTb4b4b4[Ta5d6ff"Ta5d6ffplugin_classTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3plugin_class Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3plugin Tff7b72= Te6edf3plugin_classTb4b4b4(Tff7b72selfTb4b4b4)
Te6edf3pluginTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3pluginTff7b72.Td2a8ffis_runningTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Tffa657issubclassTb4b4b4(Tffa657typeTb4b4b4(Te6edf3pluginTb4b4b4)Tb4b4b4, Te6edf3SidebandCommandPluginTb4b4b4) Tff7b72and Te6edf3command_plugins_enabledTb4b4b4:
Te6edf3command_name Tff7b72= Te6edf3pluginTff7b72.Td2a8ffcommand_name
Tff7b72if Tff7b72not Te6edf3command_name Tff7b72in Tff7b72selfTff7b72.Td2a8ffactive_command_pluginsTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffactive_command_pluginsTb4b4b4[Te6edf3command_nameTb4b4b4] Tff7b72= Te6edf3plugin
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRegistered Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3pluginTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff as handler for command Tffea00\"Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3command_nameTb4b4b4)Tff7b72+Ta5d6ff"Tffea00\"Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_NOTICETb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not register Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3pluginTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff as handler for command Tffea00\"Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3command_nameTb4b4b4)Tff7b72+Ta5d6ff"Tffea00\"Ta5d6ff. Command name was already registeredTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72elif Tffa657issubclassTb4b4b4(Tffa657typeTb4b4b4(Te6edf3pluginTb4b4b4)Tb4b4b4, Te6edf3SidebandServicePluginTb4b4b4)Tb4b4b4:
Te6edf3service_name Tff7b72= Te6edf3pluginTff7b72.Td2a8ffservice_name
Tff7b72if Tff7b72not Te6edf3service_name Tff7b72in Tff7b72selfTff7b72.Td2a8ffactive_service_pluginsTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffactive_service_pluginsTb4b4b4[Te6edf3service_nameTb4b4b4] Tff7b72= Te6edf3plugin
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRegistered Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3pluginTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff for service Tffea00\"Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3service_nameTb4b4b4)Tff7b72+Ta5d6ff"Tffea00\"Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_NOTICETb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not register Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3pluginTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff for service Tffea00\"Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3service_nameTb4b4b4)Tff7b72+Ta5d6ff"Tffea00\"Ta5d6ff. Service name was already registeredTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3pluginTff7b72.Td2a8ffstopTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72pass
Tff7b72del Te6edf3plugin
Tff7b72elif Tffa657issubclassTb4b4b4(Tffa657typeTb4b4b4(Te6edf3pluginTb4b4b4)Tb4b4b4, Te6edf3SidebandTelemetryPluginTb4b4b4)Tb4b4b4:
Te6edf3plugin_name Tff7b72= Te6edf3pluginTff7b72.Td2a8ffplugin_name
Tff7b72if Tff7b72not Te6edf3plugin_name Tff7b72in Tff7b72selfTff7b72.Td2a8ffactive_telemetry_pluginsTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffactive_telemetry_pluginsTb4b4b4[Te6edf3plugin_nameTb4b4b4] Tff7b72= Te6edf3plugin
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRegistered Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3pluginTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff as telemetry plugin Tffea00\"Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3plugin_nameTb4b4b4)Tff7b72+Ta5d6ff"Tffea00\"Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_NOTICETb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not register Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3pluginTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff as telemetry plugin Tffea00\"Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3plugin_nameTb4b4b4)Tff7b72+Ta5d6ff"Tffea00\"Ta5d6ff. Telemetry type was already registeredTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3pluginTff7b72.Td2a8ffstopTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72pass
Tff7b72del Te6edf3plugin
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffUnknown plugin type was loaded, ignoring it.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3pluginTff7b72.Td2a8ffstopTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72pass
Tff7b72del Te6edf3plugin
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffPlugin Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3pluginTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff failed to start, ignoring it.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72del Te6edf3plugin
Tff7b72def Td2a8ffreload_configurationTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__reload_configTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffsave_configurationTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__save_configTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffset_active_propagation_nodeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3dest Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNo active propagation node configuredTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmessage_routerTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffactive_propagation_node Tff7b72= Te6edf3dest
Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflast_lxmf_propagation_nodeTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3dest
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffset_outbound_propagation_nodeTb4b4b4(Te6edf3destTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffActive propagation node set to: Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3destTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__save_configTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while setting LXMF propagation node: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8ffnotifyTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3titleTb4b4b4, Te6edf3contentTb4b4b4, Te6edf3groupTff7b72=Tff7b72NoneTb4b4b4, Te6edf3context_idTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffis_daemonTb4b4b4:
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_linuxTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72from T7ee787sbappT7ee787.T7ee787uiT7ee787.T7ee787helpers Tff7b72import Te6edf3strip_emojis
Te6edf3title Tff7b72= Te6edf3strip_emojisTb4b4b4(Te6edf3titleTb4b4b4)
Te6edf3content Tff7b72= Te6edf3strip_emojisTb4b4b4(Te6edf3contentTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffnotifications_onTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6ff"Ta5d6ffpermissions.notificationsTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3notifications_permitted Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Te6edf3notifications_permitted Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4:
Te6edf3notifications_permitted Tff7b72= Tff7b72True
Tff7b72if Te6edf3notifications_permittedTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffowner_serviceTff7b72.Td2a8ffandroid_notificationTb4b4b4(Te6edf3titleTb4b4b4, Te6edf3contentTb4b4b4, Te6edf3groupTff7b72=Te6edf3groupTb4b4b4, Te6edf3context_idTff7b72=Te6edf3context_idTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3plyerTff7b72.Td2a8ffnotificationTff7b72.Td2a8ffnotifyTb4b4b4(Te6edf3titleTb4b4b4, Te6edf3contentTb4b4b4, Te6edf3notification_iconTff7b72=Tff7b72selfTff7b72.Td2a8ffnotification_iconTb4b4b4, Te6edf3context_overrideTff7b72=Tff7b72NoneTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3plyerTff7b72.Td2a8ffnotificationTff7b72.Td2a8ffnotifyTb4b4b4(Te6edf3titleTb4b4b4, Te6edf3contentTb4b4b4, Te6edf3app_iconTff7b72=Tff7b72selfTff7b72.Td2a8fficon_32Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while posting a notification to the operating system: Tffd700{e}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8fflog_announceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destTb4b4b4, Te6edf3app_dataTb4b4b4, Te6edf3dest_typeTb4b4b4, Te6edf3stamp_costTff7b72=Tff7b72NoneTb4b4b4, Te6edf3link_statsTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3app_data Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3app_data Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ff"
Tff7b72if Tffa657typeTb4b4b4(Te6edf3app_dataTb4b4b4) Tff7b72!= Tffa657bytesTb4b4b4:
Te6edf3app_data Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Tb4b4b4[Te6edf3app_dataTb4b4b4, Te6edf3stamp_costTb4b4b4]Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffReceived Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3dest_typeTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff announce for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3destTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_save_announceTb4b4b4(Te6edf3destTb4b4b4, Te6edf3app_dataTb4b4b4, Te6edf3dest_typeTb4b4b4, Te6edf3link_statsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.new_announcesTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffException while decoding LXMF destination announce data:Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fflist_conversationsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3conversationsTff7b72=Tff7b72TrueTb4b4b4, Te6edf3objectsTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationsTb4b4b4(Te6edf3conversationsTb4b4b4, Te6edf3objectsTb4b4b4)
Tff7b72if Te6edf3result Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3result
Tff7b72elseTb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8fflist_announcesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_announcesTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3result Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3result
Tff7b72elseTb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffhas_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Te6edf3existing_conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72if Te6edf3existing_conv Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffis_trustedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3conv_data Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3conv_data Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3existing_conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3existing_conv Tff7b72= Te6edf3conv_data
Tff7b72if Te6edf3existing_conv Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6fftrustTa5d6ff"Tb4b4b4] Tff7b72== T79c0ff1Tb4b4b4:
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while checking trust for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffvoice_is_trustedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3identity_hashTb4b4b4)Tb4b4b4:
Te6edf3context_dest Tff7b72= Te6edf3identity_hash
Tff7b72tryTb4b4b4:
Te6edf3lxmf_destination_hash Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffhash_from_name_and_identityTb4b4b4(Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"Tb4b4b4, Te6edf3identity_hashTb4b4b4)
Te6edf3existing_voice Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Te6edf3existing_lxmf Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3lxmf_destination_hashTb4b4b4)
Tff7b72if Te6edf3existing_lxmfTb4b4b4: Te6edf3trust Tff7b72= Te6edf3existing_lxmfTb4b4b4[Ta5d6ff"Ta5d6fftrustTa5d6ff"Tb4b4b4]
Tff7b72elseTb4b4b4: Te6edf3trust Tff7b72= Te6edf3existing_voiceTb4b4b4[Ta5d6ff"Ta5d6fftrustTa5d6ff"Tb4b4b4]
Tff7b72return Te6edf3trust Tff7b72== T79c0ff1
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not decode a valid peer name from data: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffis_objectTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3conv_data Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3conv_data Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3existing_conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3existing_conv Tff7b72= Te6edf3conv_data
Tff7b72if Te6edf3existing_conv Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3data_dict Tff7b72= Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3data_dict Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Ta5d6ff"Ta5d6ffis_objectTa5d6ff" Tff7b72in Te6edf3data_dictTb4b4b4:
Tff7b72return Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffis_objectTa5d6ff"Tb4b4b4]
Tff7b72return Tff7b72False
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while checking trust for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffptt_enabledTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3conv_data Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3conv_data Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3existing_conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3existing_conv Tff7b72= Te6edf3conv_data
Tff7b72if Te6edf3existing_conv Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3data_dict Tff7b72= Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3data_dict Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Ta5d6ff"Ta5d6ffptt_enabledTa5d6ff" Tff7b72in Te6edf3data_dictTb4b4b4:
Tff7b72return Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffptt_enabledTa5d6ff"Tb4b4b4]
Tff7b72return Tff7b72False
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while checking PTT-enabled for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffshould_send_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3conv_dataTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_enabledTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72if Te6edf3conv_data Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3existing_conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3existing_conv Tff7b72= Te6edf3conv_data
Tff7b72if Te6edf3existing_conv Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3cd Tff7b72= Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3cd Tff7b72!= Tff7b72None Tff7b72and Ta5d6ff"Ta5d6fftelemetryTa5d6ff" Tff7b72in Te6edf3cd Tff7b72and Te6edf3cdTb4b4b4[Ta5d6ff"Ta5d6fftelemetryTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_trustedTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3conv_dataTff7b72=Te6edf3existing_convTb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_to_trustedTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while checking telemetry sending for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffallow_request_fromTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_allow_requests_from_anyoneTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_allow_requests_from_trustedTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Te6edf3existing_conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72return Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6fftrustTa5d6ff"Tb4b4b4] Tff7b72== T79c0ff1
Tff7b72return Tff7b72selfTff7b72.Td2a8ffrequests_allowed_fromTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while checking request permissions for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffrequests_allowed_fromTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3conv_dataTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3conv_data Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3existing_conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3existing_conv Tff7b72= Te6edf3conv_data
Tff7b72if Te6edf3existing_conv Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3cd Tff7b72= Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3cd Tff7b72!= Tff7b72None Tff7b72and Ta5d6ff"Ta5d6ffallow_requestsTa5d6ff" Tff7b72in Te6edf3cd Tff7b72and Te6edf3cdTb4b4b4[Ta5d6ff"Ta5d6ffallow_requestsTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while checking request permissions for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffraw_display_nameTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3existing_conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72if Te6edf3existing_conv Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72!= Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72return Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]
Tff7b72elseTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff"
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while getting peer name: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ff"
Tff7b72def Td2a8ffpeer_appearanceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3convTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3appearance Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_get_appearanceTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3convTff7b72=Te6edf3convTb4b4b4)
Tff7b72if Te6edf3appearance Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3SidebandCoreTff7b72.Td2a8ffDEFAULT_APPEARANCE
Tff7b72for Te6edf3e Tff7b72in Te6edf3appearanceTb4b4b4:
Tff7b72if Te6edf3e Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3SidebandCoreTff7b72.Td2a8ffDEFAULT_APPEARANCE
Tff7b72return Te6edf3appearance
Tff7b72def Td2a8ffpeer_display_nameTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3context_dest Tff7b72== Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhashTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdisplay_nameTa5d6ff"Tb4b4b4]
Tff7b72tryTb4b4b4:
Te6edf3existing_conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72if Te6edf3existing_conv Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72!= Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72if Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6fftrustTa5d6ff"Tb4b4b4] Tff7b72== T79c0ff1Tb4b4b4:
Tff7b72return Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]
Tff7b72elseTb4b4b4:
Tff7b72return Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3app_data Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecall_app_dataTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72if Te6edf3app_data Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3existing_convTb4b4b4[Ta5d6ff"Ta5d6fftrustTa5d6ff"Tb4b4b4] Tff7b72== T79c0ff1Tb4b4b4:
Tff7b72return Te6edf3LXMFTff7b72.Td2a8ffdisplay_name_from_app_dataTb4b4b4(Te6edf3app_dataTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Te6edf3LXMFTff7b72.Td2a8ffdisplay_name_from_app_dataTb4b4b4(Te6edf3app_dataTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3app_data Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecall_app_dataTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72if Te6edf3app_data Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3name_str Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffdisplay_name_from_app_dataTb4b4b4(Te6edf3app_dataTb4b4b4)
Te6edf3addr_str Tff7b72= Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72return Te6edf3name_strTff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3addr_str
Tff7b72elseTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffAnonymous Peer Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not decode a valid peer name from data: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72def Td2a8ffvoice_display_nameTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3identity_hashTb4b4b4)Tb4b4b4:
Te6edf3context_dest Tff7b72= Te6edf3identity_hash
Tff7b72if Te6edf3context_dest Tff7b72== Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhashTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdisplay_nameTa5d6ff"Tb4b4b4]
Tff7b72tryTb4b4b4:
Te6edf3lxmf_destination_hash Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffhash_from_name_and_identityTb4b4b4(Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"Tb4b4b4, Te6edf3identity_hashTb4b4b4)
Te6edf3existing_voice Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Te6edf3existing_lxmf Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3lxmf_destination_hashTb4b4b4)
Tff7b72if Te6edf3existing_lxmfTb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffpeer_display_nameTb4b4b4(Te6edf3lxmf_destination_hashTb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffpeer_display_nameTb4b4b4(Te6edf3identity_hashTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not decode a valid peer name from data: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72def Td2a8ffclear_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_clear_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72def Td2a8ffclear_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_clear_telemetryTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72def Td2a8ffdelete_announceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_delete_announceTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72def Td2a8ffdelete_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_clear_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_clear_telemetryTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_delete_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72def Td2a8ffdelete_messageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3message_hashTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_delete_messageTb4b4b4(Te6edf3message_hashTb4b4b4)
Tff7b72def Td2a8ffread_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_unreadTb4b4b4(Te6edf3context_destTb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72def Td2a8ffunread_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3txTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_unreadTb4b4b4(Te6edf3context_destTb4b4b4, Tff7b72TrueTb4b4b4, Te6edf3txTff7b72=Te6edf3txTb4b4b4)
Tff7b72def Td2a8fftxtime_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_update_txtimeTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72def Td2a8fftrusted_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_trustedTb4b4b4(Te6edf3context_destTb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffuntrusted_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_trustedTb4b4b4(Te6edf3context_destTb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72def Td2a8ffconversation_set_objectTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3is_objectTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_objectTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3is_objectTb4b4b4)
Tff7b72def Td2a8ffconversation_set_ptt_enabledTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3ptt_enabledTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_ptt_enabledTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3ptt_enabledTb4b4b4)
Tff7b72def Td2a8ffsend_telemetry_in_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_telemetryTb4b4b4(Te6edf3context_destTb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffno_telemetry_in_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_telemetryTb4b4b4(Te6edf3context_destTb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72def Td2a8ffallow_requests_fromTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_requestsTb4b4b4(Te6edf3context_destTb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffdisallow_requests_fromTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_requestsTb4b4b4(Te6edf3context_destTb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72def Td2a8ffnamed_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3nameTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_nameTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3nameTb4b4b4)
Tff7b72def Td2a8ffcount_messagesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_message_countTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72if Te6edf3result Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3result
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72def Td2a8ffoutbound_telemetry_finishedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3messageTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3messageTff7b72.Td2a8ffstate Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffFAILED Tff7b72and Tffa657hasattrTb4b4b4(Te6edf3messageTb4b4b4, Ta5d6ff"Ta5d6fftry_propagation_on_failTa5d6ff"Tb4b4b4) Tff7b72and Te6edf3messageTff7b72.Td2a8fftry_propagation_on_failTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDirect delivery of telemetry update Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3messageTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff failed. Retrying as propagated message.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_VERBOSETb4b4b4)
Te6edf3messageTff7b72.Td2a8fftry_propagation_on_fail Tff7b72= Tff7b72None
Te6edf3messageTff7b72.Td2a8ffdelivery_attempts Tff7b72= T79c0ff0
Tff7b72del Te6edf3messageTff7b72.Td2a8ffnext_delivery_attempt
Te6edf3messageTff7b72.Td2a8ffpacked Tff7b72= Tff7b72None
Te6edf3messageTff7b72.Td2a8ffdesired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPROPAGATED
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffhandle_outboundTb4b4b4(Te6edf3messageTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3messageTff7b72.Td2a8ffstate Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffDELIVEREDTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3messageTff7b72.Td2a8ffdestination_hashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.last_send_success_timebaseTa5d6ff"Tb4b4b4, Te6edf3messageTff7b72.Td2a8fftelemetry_timebaseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3messageTff7b72.Td2a8ffdestination_hashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.update_sendingTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72if Te6edf3messageTff7b72.Td2a8ffdestination_hash Tff7b72== Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_collectorTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpending_telemetry_send Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffpending_telemetry_send_try Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8fftelemetry_send_blocked_until Tff7b72= T79c0ff0
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3messageTff7b72.Td2a8ffdestination_hashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.update_sendingTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72def Td2a8fftelemetry_request_finishedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3messageTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3messageTff7b72.Td2a8ffstate Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffFAILED Tff7b72and Tffa657hasattrTb4b4b4(Te6edf3messageTb4b4b4, Ta5d6ff"Ta5d6fftry_propagation_on_failTa5d6ff"Tb4b4b4) Tff7b72and Te6edf3messageTff7b72.Td2a8fftry_propagation_on_failTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDirect delivery of telemetry request Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3messageTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff failed. Retrying as propagated message.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_VERBOSETb4b4b4)
Te6edf3messageTff7b72.Td2a8fftry_propagation_on_fail Tff7b72= Tff7b72None
Te6edf3messageTff7b72.Td2a8ffdelivery_attempts Tff7b72= T79c0ff0
Tff7b72del Te6edf3messageTff7b72.Td2a8ffnext_delivery_attempt
Te6edf3messageTff7b72.Td2a8ffpacked Tff7b72= Tff7b72None
Te6edf3messageTff7b72.Td2a8ffdesired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPROPAGATED
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffhandle_outboundTb4b4b4(Te6edf3messageTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3messageTff7b72.Td2a8ffstate Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffDELIVEREDTb4b4b4:
Te6edf3delivery_timebase Tff7b72= Tffa657intTb4b4b4(Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3messageTff7b72.Td2a8ffdestination_hashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.last_request_success_timebaseTa5d6ff"Tb4b4b4, Te6edf3delivery_timebaseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3messageTff7b72.Td2a8ffdestination_hashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.request_sendingTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72if Te6edf3messageTff7b72.Td2a8ffdestination_hash Tff7b72== Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_collectorTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpending_telemetry_request Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffpending_telemetry_request_try Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8fftelemetry_request_blocked_until Tff7b72= T79c0ff0
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3messageTff7b72.Td2a8ffdestination_hashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.request_sendingTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72def Td2a8ff_service_request_latest_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3from_addrTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffservice_rpc_requestTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffrequest_latest_telemetryTa5d6ff"Tb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6fffrom_addrTa5d6ff"Tb4b4b4: Te6edf3from_addrTb4b4b4}Tb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while requesting latest telemetry over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffrequest_latest_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3from_addrTff7b72=Tff7b72NoneTb4b4b4, Te6edf3is_livetrackTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffallow_service_dispatch Tff7b72and Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_service_request_latest_telemetryTb4b4b4(Te6edf3from_addrTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError requesting latest telemetry: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ffnot_sentTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3from_addr Tff7b72== Tff7b72None Tff7b72or Te6edf3from_addr Tff7b72== Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhashTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffno_addressTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3from_addrTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.request_sendingTa5d6ff"Tb4b4b4) Tff7b72== Tff7b72TrueTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNot sending new telemetry request, since an earlier transfer is already in progressTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ffin_progressTa5d6ff"
Tff7b72if Te6edf3from_addr Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3dest_identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Te6edf3from_addrTb4b4b4)
Tff7b72if Te6edf3dest_identity Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffThe identity for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3from_addrTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff could not be recalled. Requesting identity from network...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffrequest_pathTb4b4b4(Te6edf3from_addrTb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ffdestination_unknownTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3dest Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTb4b4b4(Te6edf3dest_identityTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffOUTTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffSINGLETb4b4b4, Ta5d6ff"Ta5d6fflxmfTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdeliveryTa5d6ff"Tb4b4b4)
Te6edf3source Tff7b72= Tff7b72selfTff7b72.Td2a8fflxmf_destination
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_use_propagation_onlyTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Te6edf3desired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPROPAGATED
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffdelivery_link_availableTb4b4b4(Te6edf3from_addrTb4b4b4) Tff7b72and Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffcurrent_ratchet_idTb4b4b4(Te6edf3from_addrTb4b4b4) Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffHave ratchet for Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3from_addrTb4b4b4)Tffd700}Ta5d6ff, requesting opportunistic delivery of telemetry requestTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3desired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffOPPORTUNISTIC
Tff7b72elseTb4b4b4:
Te6edf3desired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffDIRECT
Te6edf3request_timebase Tff7b72= Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3from_addrTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.timebaseTa5d6ff"Tb4b4b4) Tff7b72or Te6edf3now Tff7b72- Tff7b72selfTff7b72.Td2a8fftelemetry_request_max_history
Te6edf3lxm_fields Tff7b72= Tb4b4b4{ Te6edf3LXMFTff7b72.Td2a8ffFIELD_COMMANDSTb4b4b4: Tb4b4b4[
Tb4b4b4{Te6edf3CommandsTff7b72.Td2a8ffTELEMETRY_REQUESTTb4b4b4: Te6edf3request_timebaseTb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4}
Te6edf3lxm Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTb4b4b4(Te6edf3destTb4b4b4, Te6edf3sourceTb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3desired_methodTff7b72=Te6edf3desired_methodTb4b4b4, Te6edf3fields Tff7b72= Te6edf3lxm_fieldsTb4b4b4, Te6edf3include_ticketTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3lxmTff7b72.Td2a8ffrequest_timebase Tff7b72= Te6edf3request_timebase
Te6edf3lxmTff7b72.Td2a8ffregister_delivery_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8fftelemetry_request_finishedTb4b4b4)
Te6edf3lxmTff7b72.Td2a8ffregister_failed_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8fftelemetry_request_finishedTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffget_outbound_propagation_nodeTb4b4b4(Tb4b4b4) Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_try_propagation_on_failTa5d6ff"Tb4b4b4] Tff7b72and Tff7b72not Te6edf3is_livetrackTb4b4b4:
Te6edf3lxmTff7b72.Td2a8fftry_propagation_on_fail Tff7b72= Tff7b72True
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffSending telemetry request with timebase Tffd700{Te6edf3request_timebaseTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3from_addrTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.last_request_attemptTa5d6ff"Tb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3from_addrTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.request_sendingTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffhandle_outboundTb4b4b4(Te6edf3lxmTb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ffsentTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffnot_sentTa5d6ff"
Tff7b72def Td2a8ff_is_trackingTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3object_addrTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3object_addr Tff7b72in Tff7b72selfTff7b72.Td2a8fflive_tracked_objects
Tff7b72def Td2a8ffis_trackingTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3object_addrTb4b4b4, Te6edf3allow_cacheTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_is_trackingTb4b4b4(Te6edf3object_addrTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_is_trackingTb4b4b4(Te6edf3object_addrTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffservice_rpc_requestTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffis_trackingTa5d6ff"Tb4b4b4: Te6edf3object_addrTb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3ed Tff7b72= Ta5d6ff"Ta5d6ffError while getting tracking state over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Te6edf3edTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Te6edf3ed
Tff7b72def Td2a8ff_start_trackingTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3object_addrTb4b4b4, Te6edf3intervalTb4b4b4, Te6edf3durationTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffStarting tracking of Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3object_addrTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflive_tracked_objectsTb4b4b4[Te6edf3object_addrTb4b4b4] Tff7b72= Tb4b4b4[Te6edf3intervalTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72+Te6edf3durationTb4b4b4]
Tff7b72def Td2a8ffstart_trackingTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3object_addrTb4b4b4, Te6edf3intervalTb4b4b4, Te6edf3durationTb4b4b4, Te6edf3allow_cacheTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_start_trackingTb4b4b4(Te6edf3object_addrTb4b4b4, Te6edf3intervalTb4b4b4, Te6edf3durationTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_start_trackingTb4b4b4(Te6edf3object_addrTb4b4b4, Te6edf3intervalTb4b4b4, Te6edf3durationTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3args Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ffobject_addrTa5d6ff"Tb4b4b4: Te6edf3object_addrTb4b4b4, Ta5d6ff"Ta5d6ffintervalTa5d6ff"Tb4b4b4: Te6edf3intervalTb4b4b4, Ta5d6ff"Ta5d6ffdurationTa5d6ff"Tb4b4b4: Te6edf3durationTb4b4b4}
Tff7b72return Tff7b72selfTff7b72.Td2a8ffservice_rpc_requestTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffstart_trackingTa5d6ff"Tb4b4b4: Te6edf3argsTb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3ed Tff7b72= Ta5d6ff"Ta5d6ffError while starting tracking over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Te6edf3edTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Te6edf3ed
Tff7b72def Td2a8ff_stop_trackingTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3object_addrTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffStopping tracking of Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3object_addrTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Te6edf3object_addr Tff7b72in Tff7b72selfTff7b72.Td2a8fflive_tracked_objectsTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflive_tracked_objectsTff7b72.Td2a8ffpopTb4b4b4(Te6edf3object_addrTb4b4b4)
Tff7b72def Td2a8ffstop_trackingTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3object_addrTb4b4b4, Te6edf3allow_cacheTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_stop_trackingTb4b4b4(Te6edf3object_addrTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_stop_trackingTb4b4b4(Te6edf3object_addrTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3args Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ffobject_addrTa5d6ff"Tb4b4b4: Te6edf3object_addrTb4b4b4}
Tff7b72return Tff7b72selfTff7b72.Td2a8ffservice_rpc_requestTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffstop_trackingTa5d6ff"Tb4b4b4: Te6edf3argsTb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3ed Tff7b72= Ta5d6ff"Ta5d6ffError while stopping tracking over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Te6edf3edTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Te6edf3ed
Tff7b72def Td2a8ff_service_send_latest_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3to_addrTff7b72=Tff7b72NoneTb4b4b4, Te6edf3streamTff7b72=Tff7b72NoneTb4b4b4, Te6edf3is_authorized_telemetry_requestTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffservice_rpc_requestTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffsend_latest_telemetryTa5d6ff"Tb4b4b4: Tb4b4b4{
Ta5d6ff"Ta5d6ffto_addrTa5d6ff"Tb4b4b4: Te6edf3to_addrTb4b4b4,
Ta5d6ff"Ta5d6ffstreamTa5d6ff"Tb4b4b4: Te6edf3streamTb4b4b4,
Ta5d6ff"Ta5d6ffis_authorized_telemetry_requestTa5d6ff"Tb4b4b4: Te6edf3is_authorized_telemetry_requestTb4b4b4}
Tb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while sending latest telemetry over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffsend_latest_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3to_addrTff7b72=Tff7b72NoneTb4b4b4, Te6edf3streamTff7b72=Tff7b72NoneTb4b4b4, Te6edf3is_authorized_telemetry_requestTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffallow_service_dispatch Tff7b72and Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_service_send_latest_telemetryTb4b4b4(Te6edf3to_addrTb4b4b4, Te6edf3streamTb4b4b4, Te6edf3is_authorized_telemetry_requestTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError requesting latest telemetry: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ffnot_sentTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3to_addr Tff7b72== Tff7b72None Tff7b72or Te6edf3to_addr Tff7b72== Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhashTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffno_addressTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3to_addr Tff7b72== Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_collectorTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3is_authorized_telemetry_request Tff7b72= Tff7b72True
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3to_addrTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.update_sendingTa5d6ff"Tb4b4b4) Tff7b72== Tff7b72TrueTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNot sending new telemetry update, since an earlier transfer is already in progressTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ffin_progressTa5d6ff"
Tff7b72if Tb4b4b4(Tff7b72selfTff7b72.Td2a8fflatest_packed_telemetry Tff7b72!= Tff7b72None Tff7b72and Tff7b72selfTff7b72.Td2a8fflatest_telemetry Tff7b72!= Tff7b72NoneTb4b4b4) Tff7b72or Te6edf3stream Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3dest_identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Te6edf3to_addrTb4b4b4)
Tff7b72if Te6edf3dest_identity Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffThe identity for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3to_addrTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff could not be recalled. Requesting identity from network...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffrequest_pathTb4b4b4(Te6edf3to_addrTb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ffdestination_unknownTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3dest Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTb4b4b4(Te6edf3dest_identityTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffOUTTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffSINGLETb4b4b4, Ta5d6ff"Ta5d6fflxmfTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdeliveryTa5d6ff"Tb4b4b4)
Te6edf3source Tff7b72= Tff7b72selfTff7b72.Td2a8fflxmf_destination
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_use_propagation_onlyTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Te6edf3desired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPROPAGATED
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffdelivery_link_availableTb4b4b4(Te6edf3to_addrTb4b4b4) Tff7b72and Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffcurrent_ratchet_idTb4b4b4(Te6edf3to_addrTb4b4b4) Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffHave ratchet for Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3to_addrTb4b4b4)Tffd700}Ta5d6ff, requesting opportunistic delivery of telemetryTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3desired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffOPPORTUNISTIC
Tff7b72elseTb4b4b4:
Te6edf3desired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffDIRECT
Te6edf3lxm_fields Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_message_fieldsTb4b4b4(Te6edf3to_addrTb4b4b4, Te6edf3is_authorized_telemetry_requestTff7b72=Te6edf3is_authorized_telemetry_requestTb4b4b4, Te6edf3signal_already_sentTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72if Te6edf3lxm_fields Tff7b72== Tff7b72False Tff7b72and Te6edf3stream Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffalready_sentTa5d6ff"
Tff7b72if Te6edf3stream Tff7b72!= Tff7b72None Tff7b72and Tffa657lenTb4b4b4(Te6edf3streamTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72if Te6edf3lxm_fields Tff7b72== Tff7b72FalseTb4b4b4:
Te6edf3lxm_fields Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3lxm_fieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRY_STREAMTb4b4b4] Tff7b72= Te6edf3stream
Tff7b72if Te6edf3lxm_fields Tff7b72!= Tff7b72None Tff7b72and Te6edf3lxm_fields Tff7b72!= Tff7b72False Tff7b72and Tb4b4b4(Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRY Tff7b72in Te6edf3lxm_fields Tff7b72or Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRY_STREAM Tff7b72in Te6edf3lxm_fieldsTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRY Tff7b72in Te6edf3lxm_fieldsTb4b4b4:
Te6edf3telemeter Tff7b72= Te6edf3TelemeterTff7b72.Td2a8fffrom_packedTb4b4b4(Te6edf3lxm_fieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRYTb4b4b4]Tb4b4b4)
Te6edf3telemetry_timebase Tff7b72= Te6edf3telemeterTff7b72.Td2a8ffread_allTb4b4b4(Tb4b4b4)Tb4b4b4[Ta5d6ff"Ta5d6fftimeTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffutcTa5d6ff"Tb4b4b4]
Tff7b72elif Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRY_STREAM Tff7b72in Te6edf3lxm_fieldsTb4b4b4:
Te6edf3telemetry_timebase Tff7b72= T79c0ff0
Tff7b72for Te6edf3te Tff7b72in Te6edf3lxm_fieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRY_STREAMTb4b4b4]Tb4b4b4:
Te6edf3ts Tff7b72= Te6edf3teTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3telemetry_timebase Tff7b72= Tffa657maxTb4b4b4(Te6edf3telemetry_timebaseTb4b4b4, Te6edf3tsTb4b4b4)
Tff7b72if Te6edf3telemetry_timebase Tff7b72> Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3to_addrTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.last_send_success_timebaseTa5d6ff"Tb4b4b4) Tff7b72or T79c0ff0Tb4b4b4)Tb4b4b4:
Te6edf3lxm Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTb4b4b4(Te6edf3destTb4b4b4, Te6edf3sourceTb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3desired_methodTff7b72=Te6edf3desired_methodTb4b4b4, Te6edf3fields Tff7b72= Te6edf3lxm_fieldsTb4b4b4, Te6edf3include_ticketTff7b72=Tff7b72selfTff7b72.Td2a8ffis_trustedTb4b4b4(Te6edf3to_addrTb4b4b4)Tb4b4b4)
Te6edf3lxmTff7b72.Td2a8fftelemetry_timebase Tff7b72= Te6edf3telemetry_timebase
Te6edf3lxmTff7b72.Td2a8ffregister_delivery_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8ffoutbound_telemetry_finishedTb4b4b4)
Te6edf3lxmTff7b72.Td2a8ffregister_failed_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8ffoutbound_telemetry_finishedTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffget_outbound_propagation_nodeTb4b4b4(Tb4b4b4) Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_try_propagation_on_failTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3lxmTff7b72.Td2a8fftry_propagation_on_fail Tff7b72= Tff7b72True
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffSending telemetry update with timebase Tffd700{Te6edf3telemetry_timebaseTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3to_addrTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.last_send_attemptTa5d6ff"Tb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3to_addrTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.update_sendingTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffhandle_outboundTb4b4b4(Te6edf3lxmTb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ffsentTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffTelemetry update with timebase Tffd700{Te6edf3telemetry_timebaseTffd700}Ta5d6ff was already successfully sentTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ffalready_sentTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffnothing_to_sendTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffA telemetry update was requested, but there was nothing to send.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ffnothing_to_sendTa5d6ff"
Tff7b72def Td2a8fflist_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_dest Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3after Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3before Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3limit Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_db_telemetryTb4b4b4(Te6edf3context_dest Tff7b72= Te6edf3context_destTb4b4b4, Te6edf3after Tff7b72= Te6edf3afterTb4b4b4, Te6edf3before Tff7b72= Te6edf3beforeTb4b4b4, Te6edf3limit Tff7b72= Te6edf3limitTb4b4b4) Tff7b72or Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffpeer_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3after Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3before Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3limit Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3context_dest Tff7b72== Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhash Tff7b72and Te6edf3limit Tff7b72== T79c0ff1Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fflatest_telemetry Tff7b72!= Tff7b72None Tff7b72and Tff7b72selfTff7b72.Td2a8fflatest_packed_telemetry Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4[Tff7b72selfTff7b72.Td2a8fflatest_telemetryTb4b4b4[Ta5d6ff"Ta5d6fftimeTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffutcTa5d6ff"Tb4b4b4]Tb4b4b4, Tff7b72selfTff7b72.Td2a8fflatest_packed_telemetryTb4b4b4]Tb4b4b4]
Tff7b72elseTb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4]
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while retrieving telemetry from the database: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tb4b4b4[Tb4b4b4]
Tff7b72tryTb4b4b4:
Te6edf3pts Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_telemetryTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3after Tff7b72= Te6edf3afterTb4b4b4, Te6edf3before Tff7b72= Te6edf3beforeTb4b4b4, Te6edf3limit Tff7b72= Te6edf3limitTb4b4b4)
Tff7b72if Te6edf3pts Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3context_dest Tff7b72in Te6edf3ptsTb4b4b4:
Tff7b72return Te6edf3ptsTb4b4b4[Te6edf3context_destTb4b4b4]
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while retrieving telemetry from the database: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffowm_locationTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffpeer_locationTb4b4b4(Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhashTb4b4b4)
Tff7b72def Td2a8ffpeer_locationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3context_dest Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72if Te6edf3context_dest Tff7b72== Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhashTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fflatest_telemetry Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3lt Tff7b72= Tff7b72selfTff7b72.Td2a8fflatest_telemetry
Tff7b72if Ta5d6ff"Ta5d6fflocationTa5d6ff" Tff7b72in Te6edf3lt Tff7b72and Te6edf3ltTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3l Tff7b72= Te6edf3ltTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]
Tff7b72if Ta5d6ff"Ta5d6fflatitudeTa5d6ff" Tff7b72in Te6edf3l Tff7b72and Ta5d6ff"Ta5d6fflongitudeTa5d6ff" Tff7b72in Te6edf3lTb4b4b4:
Tff7b72if Te6edf3lTb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Te6edf3lTb4b4b4[Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3l
Tff7b72return Tff7b72None
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while getting own location: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3after_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72-T79c0ff3Tff7b72*T79c0ff30Tff7b72*T79c0ff24Tff7b72*T79c0ff60Tff7b72*T79c0ff60
Te6edf3pts Tff7b72= Tff7b72selfTff7b72.Td2a8ffpeer_telemetryTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3afterTff7b72=Te6edf3after_timeTb4b4b4)
Tff7b72for Te6edf3pt Tff7b72in Te6edf3ptsTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3t Tff7b72= Te6edf3TelemeterTff7b72.Td2a8fffrom_packedTb4b4b4(Te6edf3ptTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)Tff7b72.Td2a8ffread_allTb4b4b4(Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6fflocationTa5d6ff" Tff7b72in Te6edf3t Tff7b72and Te6edf3tTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3l Tff7b72= Te6edf3tTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]
Tff7b72if Ta5d6ff"Ta5d6fflatitudeTa5d6ff" Tff7b72in Te6edf3l Tff7b72and Ta5d6ff"Ta5d6fflongitudeTa5d6ff" Tff7b72in Te6edf3lTb4b4b4:
Tff7b72if Te6edf3lTb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Te6edf3lTb4b4b4[Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3l
Tff7b72exceptTb4b4b4:
Tff7b72pass
Tff7b72return Tff7b72None
Tff7b72def Td2a8fflist_messagesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3after Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3before Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3limit Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_messagesTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3afterTb4b4b4, Te6edf3beforeTb4b4b4, Te6edf3limitTb4b4b4)
Tff7b72if Te6edf3result Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3result
Tff7b72elseTb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffservice_availableTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3heartbeat_stale_time Tff7b72= T79c0ff7.5
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3service_heartbeat Tff7b72= Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffservice.heartbeatTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3service_heartbeatTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNo service heartbeat available at Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3nowTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3now Tff7b72- Te6edf3service_heartbeat Tff7b72> Te6edf3heartbeat_stale_timeTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffStale service heartbeat at Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3nowTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff, retrying...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3service_heartbeat Tff7b72= Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffservice.heartbeatTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3now Tff7b72- Te6edf3service_heartbeat Tff7b72> Te6edf3heartbeat_stale_timeTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffService heartbeat did not recover after retryTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffService heartbeat recovered atTa5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3nowTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while getting service heartbeat: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffResponse was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3service_heartbeatTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffgui_foregroundTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.foregroundTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffgui_displayTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.displayingTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffgui_conversationTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.active_conversationTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffsetstateTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3propTb4b4b4, Te6edf3valTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffstate_lockTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffservice_stoppedTb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstate_dbTb4b4b4[Te6edf3propTb4b4b4] Tff7b72= Te6edf3val
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstate_dbTb4b4b4[Te6edf3propTb4b4b4] Tff7b72= Te6edf3val
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72def Td2a8ffsetTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffservice_rpc_requestTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffsetstateTa5d6ff"Tb4b4b4: Tb4b4b4(Te6edf3propTb4b4b4, Te6edf3valTb4b4b4)Tb4b4b4}Tb4b4b4)
Tff7b72tryTb4b4b4:
Tffa657setTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while setting state over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff. Retrying once.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72tryTb4b4b4:
Tffa657setTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError on retry as well: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff. Giving up.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffservice_set_latest_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3latest_telemetryTb4b4b4, Te6edf3latest_packed_telemetryTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflatest_telemetry Tff7b72= Te6edf3latest_telemetry
Tff7b72selfTff7b72.Td2a8fflatest_packed_telemetry Tff7b72= Te6edf3latest_packed_telemetry
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffservice_rpc_requestTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6fflatest_telemetryTa5d6ff"Tb4b4b4: Tb4b4b4(Te6edf3latest_telemetryTb4b4b4, Te6edf3latest_packed_telemetryTb4b4b4)Tb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while setting telemetry over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffservice_rpc_set_debugTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3debugTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72if Te6edf3debugTb4b4b4:
Te6edf3RNSTff7b72.Td2a8ffloglevel Tff7b72= T79c0ff6
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8ffloglevel Tff7b72= T79c0ff2
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffservice_rpc_requestTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffset_debugTa5d6ff"Tb4b4b4: Te6edf3debugTb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while setting log level over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffservice_rpc_set_ui_recordingTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recordingTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffui_recording Tff7b72= Te6edf3recording
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffservice_rpc_requestTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffset_ui_recordingTa5d6ff"Tb4b4b4: Te6edf3recordingTb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while setting UI recording status over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffservice_rpc_requestTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3requestTb4b4b4)Tb4b4b4:
T8b949e# RNS.log("Running service RPC call: "+str(request), RNS.LOG_DEBUG)
Tff7b72tryTb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffrpc_lockTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrpc_connection Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrpc_connection Tff7b72= Te6edf3multiprocessingTff7b72.Td2a8ffconnectionTff7b72.Td2a8ffClientTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrpc_addrTb4b4b4, Te6edf3familyTff7b72=Ta5d6ff"Ta5d6ffAF_UNIXTa5d6ff"Tb4b4b4, Te6edf3authkeyTff7b72=Tff7b72selfTff7b72.Td2a8ffrpc_keyTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrpc_connectionTff7b72.Td2a8ffsendTb4b4b4(Te6edf3requestTb4b4b4)
Te6edf3response Tff7b72= Tff7b72selfTff7b72.Td2a8ffrpc_connectionTff7b72.Td2a8ffrecvTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3response
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72if Tff7b72not Tffa657typeTb4b4b4(Te6edf3eTb4b4b4) Tff7b72== Tf85149ConnectionRefusedErrorTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffAn error occurred while executing the service RPC request: Tffd700{Te6edf3requestTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffThe contained exception was: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8ffgetstateTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3propTb4b4b4, Te6edf3allow_cacheTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffstate_lockTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffservice_stoppedTb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3prop Tff7b72in Tff7b72selfTff7b72.Td2a8ffstate_dbTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffstate_dbTb4b4b4[Te6edf3propTb4b4b4]
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72if Te6edf3prop Tff7b72in Tff7b72selfTff7b72.Td2a8ffstate_dbTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffstate_dbTb4b4b4[Te6edf3propTb4b4b4]
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffservice_rpc_requestTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffgetstateTa5d6ff"Tb4b4b4: Te6edf3propTb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while retrieving state Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3propTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrpc_connection Tff7b72= Tff7b72None
Tff7b72return Tff7b72None
Tff7b72def Td2a8ff_get_plugins_infoTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3np Tff7b72= T79c0ff0
Te6edf3plugins_info_text Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72for Te6edf3name Tff7b72in Tff7b72selfTff7b72.Td2a8ffactive_service_pluginsTb4b4b4:
Te6edf3np Tff7b72+Tff7b72= T79c0ff1
Te6edf3plugins_info_text Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Tffea00\nTa5d6ff- Service Plugin [b]Tffd700{Te6edf3nameTffd700}Ta5d6ff[/b]Ta5d6ff"
Tff7b72for Te6edf3name Tff7b72in Tff7b72selfTff7b72.Td2a8ffactive_telemetry_pluginsTb4b4b4:
Te6edf3np Tff7b72+Tff7b72= T79c0ff1
Te6edf3plugins_info_text Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Tffea00\nTa5d6ff- Telemetry Plugin [b]Tffd700{Te6edf3nameTffd700}Ta5d6ff[/b]Ta5d6ff"
Tff7b72for Te6edf3name Tff7b72in Tff7b72selfTff7b72.Td2a8ffactive_command_pluginsTb4b4b4:
Te6edf3np Tff7b72+Tff7b72= T79c0ff1
Te6edf3plugins_info_text Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Tffea00\nTa5d6ff- Command Plugin [b]Tffd700{Te6edf3nameTffd700}Ta5d6ff[/b]Ta5d6ff"
Tff7b72if Te6edf3np Tff7b72== T79c0ff0Tb4b4b4:
Te6edf3plugins_info_text Tff7b72= Ta5d6ff"Ta5d6ff[i]No plugins are currently loaded[/i]Ta5d6ff"
Tff7b72elif Te6edf3np Tff7b72== T79c0ff1Tb4b4b4:
Te6edf3plugins_info_text Tff7b72= Ta5d6ff"Ta5d6ffCurrently, 1 plugin is loaded and active:Tffea00\nTa5d6ff" Tff7b72+ Te6edf3plugins_info_text
Tff7b72elseTb4b4b4:
Te6edf3plugins_info_text Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffCurrently, Tffd700{Te6edf3npTffd700}Ta5d6ff plugins are loaded and active:Tffea00\nTa5d6ff" Tff7b72+ Te6edf3plugins_info_text
Tff7b72return Te6edf3plugins_info_text
Tff7b72def Td2a8ffget_plugins_infoTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_get_plugins_infoTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_get_plugins_infoTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffservice_rpc_requestTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffget_plugins_infoTa5d6ff"Tb4b4b4: Tff7b72TrueTb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3ed Tff7b72= Ta5d6ff"Ta5d6ffError while getting plugins info over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Te6edf3edTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Te6edf3ed
Tff7b72def Td2a8ff_get_destination_establishment_rateTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destination_hashTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3mr Tff7b72= Tff7b72selfTff7b72.Td2a8ffmessage_router
Te6edf3oh Tff7b72= Te6edf3destination_hash
Te6edf3ol Tff7b72= Tff7b72None
Tff7b72if Te6edf3oh Tff7b72in Te6edf3mrTff7b72.Td2a8ffdirect_linksTb4b4b4:
Te6edf3ol Tff7b72= Te6edf3mrTff7b72.Td2a8ffdirect_linksTb4b4b4[Te6edf3ohTb4b4b4]
Tff7b72elif Te6edf3oh Tff7b72in Te6edf3mrTff7b72.Td2a8ffbackchannel_linksTb4b4b4:
Te6edf3ol Tff7b72= Te6edf3mrTff7b72.Td2a8ffbackchannel_linksTb4b4b4[Te6edf3ohTb4b4b4]
Tff7b72if Te6edf3ol Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3ler Tff7b72= Te6edf3olTff7b72.Td2a8ffget_establishment_rateTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3lerTb4b4b4:
Tff7b72return Te6edf3ler
Tff7b72return Tff7b72None
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72return Tff7b72None
Tff7b72def Td2a8ffget_destination_establishment_rateTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destination_hashTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_get_destination_establishment_rateTb4b4b4(Te6edf3destination_hashTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_get_destination_establishment_rateTb4b4b4(Te6edf3destination_hashTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffservice_rpc_requestTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffget_destination_establishment_rateTa5d6ff"Tb4b4b4: Te6edf3destination_hashTb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3ed Tff7b72= Ta5d6ff"Ta5d6ffError while getting destination link etablishment rate over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Te6edf3edTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Tff7b72None
Tff7b72def Td2a8ff_get_destination_mtuTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destination_hashTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3mr Tff7b72= Tff7b72selfTff7b72.Td2a8ffmessage_router
Te6edf3oh Tff7b72= Te6edf3destination_hash
Te6edf3ol Tff7b72= Tff7b72None
Tff7b72if Te6edf3oh Tff7b72in Te6edf3mrTff7b72.Td2a8ffdirect_linksTb4b4b4:
Te6edf3ol Tff7b72= Te6edf3mrTff7b72.Td2a8ffdirect_linksTb4b4b4[Te6edf3ohTb4b4b4]
Tff7b72elif Te6edf3oh Tff7b72in Te6edf3mrTff7b72.Td2a8ffbackchannel_linksTb4b4b4:
Te6edf3ol Tff7b72= Te6edf3mrTff7b72.Td2a8ffbackchannel_linksTb4b4b4[Te6edf3ohTb4b4b4]
Tff7b72if Te6edf3ol Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3olTff7b72.Td2a8ffget_mtuTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72None
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72return Tff7b72None
Tff7b72def Td2a8ffget_destination_mtuTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destination_hashTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_get_destination_mtuTb4b4b4(Te6edf3destination_hashTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_get_destination_mtuTb4b4b4(Te6edf3destination_hashTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffservice_rpc_requestTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffget_destination_mtuTa5d6ff"Tb4b4b4: Te6edf3destination_hashTb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3ed Tff7b72= Ta5d6ff"Ta5d6ffError while getting destination link MTU over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Te6edf3edTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Tff7b72None
Tff7b72def Td2a8ff_get_destination_edrTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destination_hashTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3mr Tff7b72= Tff7b72selfTff7b72.Td2a8ffmessage_router
Te6edf3oh Tff7b72= Te6edf3destination_hash
Te6edf3ol Tff7b72= Tff7b72None
Tff7b72if Te6edf3oh Tff7b72in Te6edf3mrTff7b72.Td2a8ffdirect_linksTb4b4b4:
Te6edf3ol Tff7b72= Te6edf3mrTff7b72.Td2a8ffdirect_linksTb4b4b4[Te6edf3ohTb4b4b4]
Tff7b72elif Te6edf3oh Tff7b72in Te6edf3mrTff7b72.Td2a8ffbackchannel_linksTb4b4b4:
Te6edf3ol Tff7b72= Te6edf3mrTff7b72.Td2a8ffbackchannel_linksTb4b4b4[Te6edf3ohTb4b4b4]
Tff7b72if Te6edf3ol Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72return Te6edf3olTff7b72.Td2a8ffget_expected_rateTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72None
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72return Tff7b72None
Tff7b72def Td2a8ffget_destination_edrTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destination_hashTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_get_destination_edrTb4b4b4(Te6edf3destination_hashTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_get_destination_edrTb4b4b4(Te6edf3destination_hashTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffservice_rpc_requestTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffget_destination_edrTa5d6ff"Tb4b4b4: Te6edf3destination_hashTb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3ed Tff7b72= Ta5d6ff"Ta5d6ffError while getting destination link EIFR over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Te6edf3edTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Tff7b72None
Tff7b72def Td2a8ff__start_rpc_listenerTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffStarting RPC listenerTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrpc_listener Tff7b72= Te6edf3multiprocessingTff7b72.Td2a8ffconnectionTff7b72.Td2a8ffListenerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrpc_addrTb4b4b4, Te6edf3familyTff7b72=Ta5d6ff"Ta5d6ffAF_UNIXTa5d6ff"Tb4b4b4, Te6edf3authkeyTff7b72=Tff7b72selfTff7b72.Td2a8ffrpc_keyTb4b4b4)
Te6edf3thread Tff7b72= Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Tff7b72selfTff7b72.Td2a8ff__rpc_loopTb4b4b4)
Te6edf3threadTff7b72.Td2a8ffdaemon Tff7b72= Tff7b72True
Te6edf3threadTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not start RPC listener on @Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrpc_addrTb4b4b4[T79c0ff1Tb4b4b4:Tb4b4b4]Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff. Terminating now. Clear up anything using the port and try again.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8ffpanicTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff__rpc_loopTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72while Tff7b72TrueTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffReady for next RPC clientTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3rpc_connection Tff7b72= Tff7b72selfTff7b72.Td2a8ffrpc_listenerTff7b72.Td2a8ffacceptTb4b4b4(Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAccepted RPC clientTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72def Td2a8ffjob_factoryTb4b4b4(Te6edf3connectionTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffrpc_client_jobTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72while Te6edf3connectionTb4b4b4:
Te6edf3call Tff7b72= Te6edf3connectionTff7b72.Td2a8ffrecvTb4b4b4(Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffgetstateTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Te6edf3prop Tff7b72= Te6edf3callTb4b4b4[Ta5d6ff"Ta5d6ffgetstateTa5d6ff"Tb4b4b4]
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Te6edf3propTb4b4b4)Tb4b4b4)
Tff7b72elif Ta5d6ff"Ta5d6ffsetstateTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Te6edf3propTb4b4b4, Te6edf3val Tff7b72= Te6edf3callTb4b4b4[Ta5d6ff"Ta5d6ffsetstateTa5d6ff"Tb4b4b4]
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Te6edf3propTb4b4b4, Te6edf3valTb4b4b4)Tb4b4b4)
Tff7b72elif Ta5d6ff"Ta5d6fflatest_telemetryTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Te6edf3tTb4b4b4,Te6edf3p Tff7b72= Te6edf3callTb4b4b4[Ta5d6ff"Ta5d6fflatest_telemetryTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8fflatest_telemetry Tff7b72= Te6edf3t
Tff7b72selfTff7b72.Td2a8fflatest_packed_telemetry Tff7b72= Te6edf3p
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72elif Ta5d6ff"Ta5d6ffset_debugTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffservice_rpc_set_debugTb4b4b4(Te6edf3callTb4b4b4[Ta5d6ff"Ta5d6ffset_debugTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72elif Ta5d6ff"Ta5d6ffset_ui_recordingTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffservice_rpc_set_ui_recordingTb4b4b4(Te6edf3callTb4b4b4[Ta5d6ff"Ta5d6ffset_ui_recordingTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72elif Ta5d6ff"Ta5d6ffget_plugins_infoTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_get_plugins_infoTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72elif Ta5d6ff"Ta5d6ffget_destination_establishment_rateTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_get_destination_establishment_rateTb4b4b4(Te6edf3callTb4b4b4[Ta5d6ff"Ta5d6ffget_destination_establishment_rateTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)
Tff7b72elif Ta5d6ff"Ta5d6ffget_destination_mtuTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_get_destination_mtuTb4b4b4(Te6edf3callTb4b4b4[Ta5d6ff"Ta5d6ffget_destination_mtuTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)
Tff7b72elif Ta5d6ff"Ta5d6ffget_destination_edrTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_get_destination_edrTb4b4b4(Te6edf3callTb4b4b4[Ta5d6ff"Ta5d6ffget_destination_edrTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)
Tff7b72elif Ta5d6ff"Ta5d6ffsend_messageTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Te6edf3args Tff7b72= Te6edf3callTb4b4b4[Ta5d6ff"Ta5d6ffsend_messageTa5d6ff"Tb4b4b4]
Te6edf3send_result Tff7b72= Tff7b72selfTff7b72.Td2a8ffsend_messageTb4b4b4(
Te6edf3argsTb4b4b4[Ta5d6ff"Ta5d6ffcontentTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3argsTb4b4b4[Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3argsTb4b4b4[Ta5d6ff"Ta5d6ffpropagationTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3skip_fieldsTff7b72=Te6edf3argsTb4b4b4[Ta5d6ff"Ta5d6ffskip_fieldsTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3no_displayTff7b72=Te6edf3argsTb4b4b4[Ta5d6ff"Ta5d6ffno_displayTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3attachmentTff7b72=Te6edf3argsTb4b4b4[Ta5d6ff"Ta5d6ffattachmentTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3imageTff7b72=Te6edf3argsTb4b4b4[Ta5d6ff"Ta5d6ffimageTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3audioTff7b72=Te6edf3argsTb4b4b4[Ta5d6ff"Ta5d6ffaudioTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Te6edf3send_resultTb4b4b4)
Tff7b72elif Ta5d6ff"Ta5d6ffcancel_messageTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Te6edf3args Tff7b72= Te6edf3callTb4b4b4[Ta5d6ff"Ta5d6ffcancel_messageTa5d6ff"Tb4b4b4]
Te6edf3cancel_result Tff7b72= Tff7b72selfTff7b72.Td2a8ffcancel_messageTb4b4b4(Te6edf3argsTb4b4b4[Ta5d6ff"Ta5d6ffmessage_idTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Te6edf3cancel_resultTb4b4b4)
Tff7b72elif Ta5d6ff"Ta5d6ffsend_commandTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Te6edf3args Tff7b72= Te6edf3callTb4b4b4[Ta5d6ff"Ta5d6ffsend_commandTa5d6ff"Tb4b4b4]
Te6edf3send_result Tff7b72= Tff7b72selfTff7b72.Td2a8ffsend_commandTb4b4b4(
Te6edf3argsTb4b4b4[Ta5d6ff"Ta5d6ffcontentTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3argsTb4b4b4[Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3argsTb4b4b4[Ta5d6ff"Ta5d6ffpropagationTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Te6edf3send_resultTb4b4b4)
Tff7b72elif Ta5d6ff"Ta5d6ffrequest_latest_telemetryTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Te6edf3args Tff7b72= Te6edf3callTb4b4b4[Ta5d6ff"Ta5d6ffrequest_latest_telemetryTa5d6ff"Tb4b4b4]
Te6edf3send_result Tff7b72= Tff7b72selfTff7b72.Td2a8ffrequest_latest_telemetryTb4b4b4(Te6edf3argsTb4b4b4[Ta5d6ff"Ta5d6fffrom_addrTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Te6edf3send_resultTb4b4b4)
Tff7b72elif Ta5d6ff"Ta5d6ffsend_latest_telemetryTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Te6edf3args Tff7b72= Te6edf3callTb4b4b4[Ta5d6ff"Ta5d6ffsend_latest_telemetryTa5d6ff"Tb4b4b4]
Te6edf3send_result Tff7b72= Tff7b72selfTff7b72.Td2a8ffsend_latest_telemetryTb4b4b4(
Te6edf3to_addrTff7b72=Te6edf3argsTb4b4b4[Ta5d6ff"Ta5d6ffto_addrTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3streamTff7b72=Te6edf3argsTb4b4b4[Ta5d6ff"Ta5d6ffstreamTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3is_authorized_telemetry_requestTff7b72=Te6edf3argsTb4b4b4[Ta5d6ff"Ta5d6ffis_authorized_telemetry_requestTa5d6ff"Tb4b4b4]
Tb4b4b4)
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Te6edf3send_resultTb4b4b4)
Tff7b72elif Ta5d6ff"Ta5d6ffget_lxm_progressTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Te6edf3args Tff7b72= Te6edf3callTb4b4b4[Ta5d6ff"Ta5d6ffget_lxm_progressTa5d6ff"Tb4b4b4]
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_lxm_progressTb4b4b4(Te6edf3argsTb4b4b4[Ta5d6ff"Ta5d6fflxm_hashTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)
Tff7b72elif Ta5d6ff"Ta5d6ffget_lxm_stamp_costTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Te6edf3args Tff7b72= Te6edf3callTb4b4b4[Ta5d6ff"Ta5d6ffget_lxm_stamp_costTa5d6ff"Tb4b4b4]
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_lxm_stamp_costTb4b4b4(Te6edf3argsTb4b4b4[Ta5d6ff"Ta5d6fflxm_hashTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)
Tff7b72elif Ta5d6ff"Ta5d6ffis_trackingTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffis_trackingTb4b4b4(Te6edf3callTb4b4b4[Ta5d6ff"Ta5d6ffis_trackingTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)
Tff7b72elif Ta5d6ff"Ta5d6ffstart_trackingTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Te6edf3args Tff7b72= Te6edf3callTb4b4b4[Ta5d6ff"Ta5d6ffstart_trackingTa5d6ff"Tb4b4b4]
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstart_trackingTb4b4b4(Te6edf3object_addrTff7b72=Te6edf3argsTb4b4b4[Ta5d6ff"Ta5d6ffobject_addrTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3intervalTff7b72=Te6edf3argsTb4b4b4[Ta5d6ff"Ta5d6ffintervalTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3durationTff7b72=Te6edf3argsTb4b4b4[Ta5d6ff"Ta5d6ffdurationTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)
Tff7b72elif Ta5d6ff"Ta5d6ffstop_trackingTa5d6ff" Tff7b72in Te6edf3callTb4b4b4:
Te6edf3args Tff7b72= Te6edf3callTb4b4b4[Ta5d6ff"Ta5d6ffstop_trackingTa5d6ff"Tb4b4b4]
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstop_trackingTb4b4b4(Te6edf3object_addrTff7b72=Te6edf3argsTb4b4b4[Ta5d6ff"Ta5d6ffobject_addrTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3connectionTff7b72.Td2a8ffsendTb4b4b4(Tff7b72NoneTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError on client RPC connection: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3connectionTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72exceptTb4b4b4:
Tff7b72pass
Tff7b72return Te6edf3rpc_client_job
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3job_factoryTb4b4b4(Te6edf3rpc_connectionTb4b4b4)Tb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error ocurred while handling RPC call from local client: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8ffsetpersistentTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3propTb4b4b4, Te6edf3valTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_setpersistentTb4b4b4(Te6edf3propTb4b4b4, Te6edf3valTb4b4b4)
T8b949e# def cb():
T8b949e# self._db_setpersistent(prop, val)
T8b949e# threading.Thread(target=cb, daemon=True).start()
Tff7b72def Td2a8ffgetpersistentTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3propTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_db_getpersistentTb4b4b4(Te6edf3propTb4b4b4)
Tff7b72def Td2a8ff__event_conversations_changedTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ff__event_conversation_changedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ff__db_connectTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdb Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdb Tff7b72= Te6edf3sqlite3Tff7b72.Td2a8ffconnectTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdb_pathTb4b4b4, Te6edf3check_same_threadTff7b72=Tff7b72FalseTb4b4b4, Te6edf3timeoutTff7b72=T79c0ff15.0Tb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ffdb
Tff7b72def Td2a8ff__db_reconnectTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdb Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while closing database for reconnect. The contained exception was:Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdb Tff7b72= Tff7b72None
Tff7b72return Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff__db_initTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffDROP TABLE IF EXISTS lxmTa5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE TABLE lxm (lxm_hash BLOB PRIMARY KEY, dest BLOB, source BLOB, title BLOB, tx_ts INTEGER, rx_ts INTEGER, state INTEGER, method INTEGER, t_encrypted INTEGER, t_encryption INTEGER, data BLOB, extra BLOB)Ta5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffDROP TABLE IF EXISTS convTa5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE TABLE conv (dest_context BLOB PRIMARY KEY, last_tx INTEGER, last_rx INTEGER, unread INTEGER, type INTEGER, trust INTEGER, name BLOB, data BLOB)Ta5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffDROP TABLE IF EXISTS announceTa5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE TABLE announce (id PRIMARY KEY, received INTEGER, source BLOB, data BLOB, dest_type BLOB)Ta5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffDROP TABLE IF EXISTS telemetryTa5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE TABLE IF NOT EXISTS telemetry (id INTEGER PRIMARY KEY, dest_context BLOB, ts INTEGER, data BLOB)Ta5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffDROP TABLE IF EXISTS stateTa5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE TABLE state (property BLOB PRIMARY KEY, value BLOB)Ta5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffDROP TABLE IF EXISTS persistentTa5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE TABLE persistent (property BLOB PRIMARY KEY, value BLOB)Ta5d6ff"Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff__db_indicesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE UNIQUE INDEX IF NOT EXISTS idx_persistent_property ON persistent(property)Ta5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE UNIQUE INDEX IF NOT EXISTS idx_state_property ON state(property)Ta5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE UNIQUE INDEX IF NOT EXISTS idx_conv_dest_context ON conv(dest_context)Ta5d6ff"Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_inittelemetryTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE TABLE IF NOT EXISTS telemetry (id INTEGER PRIMARY KEY, dest_context BLOB, ts INTEGER, data BLOB)Ta5d6ff"Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE INDEX IF NOT EXISTS idx_telemetry_ts ON telemetry(ts)Ta5d6ff"Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_upgradetablesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e# TODO: Remove this again at some point in the future
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffSELECT sql FROM sqlite_master WHERE type = Ta5d6ff'Ta5d6fftableTa5d6ff'Ta5d6ff AND name = Ta5d6ff'Ta5d6ffannounceTa5d6ff'Ta5d6ff AND sql LIKE Ta5d6ff'Tffd700%eTa5d6ffxtraTa5d6ff%Ta5d6ff'Ta5d6ff"Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4:
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffALTER TABLE announce ADD COLUMN extra BLOBTa5d6ff"Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_initstateTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e# db = self.__db_connect()
T8b949e# dbc = db.cursor()
T8b949e# dbc.execute("DROP TABLE IF EXISTS state")
T8b949e# dbc.execute("CREATE TABLE state (property BLOB PRIMARY KEY, value BLOB)")
T8b949e# db.commit()
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffdatabase_readyTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ff_db_initpersistentTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffCREATE TABLE IF NOT EXISTS persistent (property BLOB PRIMARY KEY, value BLOB)Ta5d6ff"Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_getpersistentTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3propTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from persistent where property=:upropTa5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffupropTa5d6ff"Tb4b4b4: Te6edf3propTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4}Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72< T79c0ff1Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3entry Tff7b72= Te6edf3resultTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3val Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3entryTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)
Tff7b72if Te6edf3val Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffdelete from persistent where (property=:uprop);Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffupropTa5d6ff"Tb4b4b4: Te6edf3propTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4}Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3val
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not unpack persistent value from database for property Tffea00\"Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3propTb4b4b4)Tff7b72+Ta5d6ff"Tffea00\"Ta5d6ff. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72None
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred during persistent getstate database operation: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdb Tff7b72= Tff7b72None
Tff7b72def Td2a8ff_db_setpersistentTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3propTb4b4b4, Te6edf3valTb4b4b4)Tb4b4b4:
Te6edf3existing_prop Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_getpersistentTb4b4b4(Te6edf3propTb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3uprop Tff7b72= Te6edf3propTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3bval Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Te6edf3valTb4b4b4)
Tff7b72if Te6edf3existing_prop Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffINSERT INTO persistent (property, value) values (?, ?)Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3upropTb4b4b4, Te6edf3bvalTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while setting persistent state property Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3propTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff in DB: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRetrying as update query...Ta5d6ff"Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE state set value=:bval where property=:uprop;Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffbvalTa5d6ff"Tb4b4b4: Te6edf3bvalTb4b4b4, Ta5d6ff"Ta5d6ffupropTa5d6ff"Tb4b4b4: Te6edf3upropTb4b4b4}Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE persistent set value=:bval where property=:uprop;Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffbvalTa5d6ff"Tb4b4b4: Te6edf3bvalTb4b4b4, Ta5d6ff"Ta5d6ffupropTa5d6ff"Tb4b4b4: Te6edf3upropTb4b4b4}Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred during persistent setstate database operation: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdb Tff7b72= Tff7b72None
Tff7b72def Td2a8ff_db_conversation_update_txtimeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3is_retry Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE conv set last_tx = ? where dest_context = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3context_destTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while updating conversation TX time: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__db_reconnectTb4b4b4(Tb4b4b4)
T8b949e# if not is_retry:
T8b949e# RNS.log("Retrying operation...", RNS.LOG_ERROR)
T8b949e# self._db_conversation_update_txtime(context_dest, is_retry=True)
Tff7b72def Td2a8ff_db_conversation_set_unreadTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3unreadTb4b4b4, Te6edf3tx Tff7b72= Tff7b72FalseTb4b4b4, Te6edf3is_retry Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3unreadTb4b4b4:
Tff7b72if Te6edf3txTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE conv set unread = ?, last_tx = ? where dest_context = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3unreadTb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3context_destTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE conv set unread = ?, last_rx = ? where dest_context = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3unreadTb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3context_destTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE conv set unread = ? where dest_context = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3unreadTb4b4b4, Te6edf3context_destTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while updating conversation unread flag: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__db_reconnectTb4b4b4(Tb4b4b4)
T8b949e# if not is_retry:
T8b949e# RNS.log("Retrying operation...", RNS.LOG_ERROR)
T8b949e# self._db_conversation_set_unread(context_dest, unread, tx, is_retry=True)
Tff7b72def Td2a8ff_db_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_dest Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3after Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3before Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3limit Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3limit_part Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Te6edf3limitTb4b4b4:
Te6edf3limit_part Tff7b72= Ta5d6ff"Ta5d6ff LIMIT Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tffa657intTb4b4b4(Te6edf3limitTb4b4b4)Tb4b4b4)
Te6edf3order_part Tff7b72= Ta5d6ff"Ta5d6ff order by ts DESCTa5d6ff"Tff7b72+Te6edf3limit_part
Tff7b72if Te6edf3context_dest Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3after Tff7b72!= Tff7b72None Tff7b72and Te6edf3before Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from telemetry where ts>:after_tsTa5d6ff"Tff7b72+Te6edf3order_part
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffafter_tsTa5d6ff"Tb4b4b4: Te6edf3afterTb4b4b4}Tb4b4b4)
Tff7b72elif Te6edf3after Tff7b72== Tff7b72None Tff7b72and Te6edf3before Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from telemetry where ts<:before_tsTa5d6ff"Tff7b72+Te6edf3order_part
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffbefore_tsTa5d6ff"Tb4b4b4: Te6edf3beforeTb4b4b4}Tb4b4b4)
Tff7b72elif Te6edf3after Tff7b72!= Tff7b72None Tff7b72and Te6edf3before Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from telemetry where ts<:before_ts and ts>:after_tsTa5d6ff"Tff7b72+Te6edf3order_part
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffbefore_tsTa5d6ff"Tb4b4b4: Te6edf3beforeTb4b4b4, Ta5d6ff"Ta5d6ffafter_tsTa5d6ff"Tb4b4b4: Te6edf3afterTb4b4b4}Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3query Tff7b72= Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from telemetryTa5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Tb4b4b4}Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3after Tff7b72!= Tff7b72None Tff7b72and Te6edf3before Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from telemetry where dest_context=:context_dest and ts>:after_tsTa5d6ff"Tff7b72+Te6edf3order_part
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffcontext_destTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4, Ta5d6ff"Ta5d6ffafter_tsTa5d6ff"Tb4b4b4: Te6edf3afterTb4b4b4}Tb4b4b4)
Tff7b72elif Te6edf3after Tff7b72== Tff7b72None Tff7b72and Te6edf3before Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from telemetry where dest_context=:context_dest and ts<:before_tsTa5d6ff"Tff7b72+Te6edf3order_part
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffcontext_destTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4, Ta5d6ff"Ta5d6ffbefore_tsTa5d6ff"Tb4b4b4: Te6edf3beforeTb4b4b4}Tb4b4b4)
Tff7b72elif Te6edf3after Tff7b72!= Tff7b72None Tff7b72and Te6edf3before Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from telemetry where dest_context=:context_dest and ts<:before_ts and ts>:after_tsTa5d6ff"Tff7b72+Te6edf3order_part
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffcontext_destTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4, Ta5d6ff"Ta5d6ffbefore_tsTa5d6ff"Tb4b4b4: Te6edf3beforeTb4b4b4, Ta5d6ff"Ta5d6ffafter_tsTa5d6ff"Tb4b4b4: Te6edf3afterTb4b4b4}Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3query Tff7b72= Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from telemetry where dest_context=:context_destTa5d6ff"Tff7b72+Te6edf3order_part
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffcontext_destTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4}Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72< T79c0ff1Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3results Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72for Te6edf3entry Tff7b72in Te6edf3resultTb4b4b4:
Te6edf3telemetry_source Tff7b72= Te6edf3entryTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3telemetry_timestamp Tff7b72= Te6edf3entryTb4b4b4[T79c0ff2Tb4b4b4]
Te6edf3telemetry_data Tff7b72= Te6edf3entryTb4b4b4[T79c0ff3Tb4b4b4]
Tff7b72if Tff7b72not Te6edf3telemetry_source Tff7b72in Te6edf3resultsTb4b4b4:
Te6edf3resultsTb4b4b4[Te6edf3telemetry_sourceTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3resultsTb4b4b4[Te6edf3telemetry_sourceTb4b4b4]Tff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4[Te6edf3telemetry_timestampTb4b4b4, Te6edf3telemetry_dataTb4b4b4]Tb4b4b4)
Tff7b72return Te6edf3results
Tff7b72def Td2a8ff_db_save_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3telemetryTb4b4b4, Te6edf3physical_link Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3source_dest Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3via Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3is_retry Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3remote_telemeter Tff7b72= Te6edf3TelemeterTff7b72.Td2a8fffrom_packedTb4b4b4(Te6edf3telemetryTb4b4b4)
Te6edf3read_telemetry Tff7b72= Te6edf3remote_telemeterTff7b72.Td2a8ffread_allTb4b4b4(Tb4b4b4)
Te6edf3telemetry_timestamp Tff7b72= Te6edf3read_telemetryTb4b4b4[Ta5d6ff"Ta5d6fftimeTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffutcTa5d6ff"Tb4b4b4]
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from telemetry where dest_context=:ctx and ts=:ttsTa5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffctxTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4, Ta5d6ff"Ta5d6ffttsTa5d6ff"Tb4b4b4: Te6edf3telemetry_timestampTb4b4b4}Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72!= T79c0ff0Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffTelemetry entry with source Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff and timestamp Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3telemetry_timestampTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff already exists, skipping saveTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Tff7b72None
Tff7b72if Te6edf3physical_link Tff7b72!= Tff7b72None Tff7b72and Tffa657lenTb4b4b4(Te6edf3physical_linkTb4b4b4) Tff7b72!= T79c0ff0Tb4b4b4:
Te6edf3remote_telemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6ffphysical_linkTa5d6ff"Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffrssiTa5d6ff" Tff7b72in Te6edf3physical_linkTb4b4b4: Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffphysical_linkTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffrssi Tff7b72= Te6edf3physical_linkTb4b4b4[Ta5d6ff"Ta5d6ffrssiTa5d6ff"Tb4b4b4]
Tff7b72if Ta5d6ff"Ta5d6ffsnrTa5d6ff" Tff7b72in Te6edf3physical_linkTb4b4b4: Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffphysical_linkTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffsnr Tff7b72= Te6edf3physical_linkTb4b4b4[Ta5d6ff"Ta5d6ffsnrTa5d6ff"Tb4b4b4]
Tff7b72if Ta5d6ff"Ta5d6ffqTa5d6ff" Tff7b72in Te6edf3physical_linkTb4b4b4: Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffphysical_linkTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffq Tff7b72= Te6edf3physical_linkTb4b4b4[Ta5d6ff"Ta5d6ffqTa5d6ff"Tb4b4b4]
Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffphysical_linkTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffupdate_dataTb4b4b4(Tb4b4b4)
Te6edf3telemetry Tff7b72= Te6edf3remote_telemeterTff7b72.Td2a8ffpackedTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3source_dest Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3remote_telemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4)
Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffby Tff7b72= Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhash
Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffvia Tff7b72= Te6edf3source_dest
Te6edf3rl Tff7b72= Te6edf3remote_telemeterTff7b72.Td2a8ffreadTb4b4b4(Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3rl Tff7b72and Ta5d6ff"Ta5d6fflatitudeTa5d6ff" Tff7b72in Te6edf3rl Tff7b72and Ta5d6ff"Ta5d6fflongitudeTa5d6ff" Tff7b72in Te6edf3rl Tff7b72and Ta5d6ff"Ta5d6ffaltitudeTa5d6ff" Tff7b72in Te6edf3rlTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fflatest_telemetry Tff7b72!= Tff7b72None Tff7b72and Ta5d6ff"Ta5d6fflocationTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8fflatest_telemetryTb4b4b4:
Te6edf3ol Tff7b72= Tff7b72selfTff7b72.Td2a8fflatest_telemetryTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3ol Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Ta5d6ff"Ta5d6fflatitudeTa5d6ff" Tff7b72in Te6edf3ol Tff7b72and Ta5d6ff"Ta5d6fflongitudeTa5d6ff" Tff7b72in Te6edf3ol Tff7b72and Ta5d6ff"Ta5d6ffaltitudeTa5d6ff" Tff7b72in Te6edf3olTb4b4b4:
Te6edf3olat Tff7b72= Te6edf3olTb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4]Tb4b4b4; Te6edf3olon Tff7b72= Te6edf3olTb4b4b4[Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4]Tb4b4b4; Te6edf3oalt Tff7b72= Te6edf3olTb4b4b4[Ta5d6ff"Ta5d6ffaltitudeTa5d6ff"Tb4b4b4]
Te6edf3rlat Tff7b72= Te6edf3rlTb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4]Tb4b4b4; Te6edf3rlon Tff7b72= Te6edf3rlTb4b4b4[Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4]Tb4b4b4; Te6edf3ralt Tff7b72= Te6edf3rlTb4b4b4[Ta5d6ff"Ta5d6ffaltitudeTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3olat Tff7b72!= Tff7b72None Tff7b72and Te6edf3olon Tff7b72!= Tff7b72None Tff7b72and Te6edf3oalt Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3rlat Tff7b72!= Tff7b72None Tff7b72and Te6edf3rlon Tff7b72!= Tff7b72None Tff7b72and Te6edf3ralt Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffset_distanceTb4b4b4(
Tb4b4b4(Te6edf3olatTb4b4b4, Te6edf3olonTb4b4b4, Te6edf3oaltTb4b4b4)Tb4b4b4, Tb4b4b4(Te6edf3rlatTb4b4b4, Te6edf3rlonTb4b4b4, Te6edf3raltTb4b4b4)
Tb4b4b4)
Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffupdate_dataTb4b4b4(Tb4b4b4)
Te6edf3telemetry Tff7b72= Te6edf3remote_telemeterTff7b72.Td2a8ffpackedTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3via Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffreceivedTa5d6ff" Tff7b72in Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4:
Te6edf3remote_telemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffbyTa5d6ff" Tff7b72in Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffdataTb4b4b4:
Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffby Tff7b72= Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffdataTb4b4b4[Ta5d6ff"Ta5d6ffbyTa5d6ff"Tb4b4b4]
Tff7b72if Ta5d6ff"Ta5d6ffdistanceTa5d6ff" Tff7b72in Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffdataTb4b4b4:
Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffgeodesic_distance Tff7b72= Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffdataTb4b4b4[Ta5d6ff"Ta5d6ffdistanceTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffgeodesicTa5d6ff"Tb4b4b4]
Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffeuclidian_distance Tff7b72= Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffdataTb4b4b4[Ta5d6ff"Ta5d6ffdistanceTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffeuclidianTa5d6ff"Tb4b4b4]
Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffvia Tff7b72= Te6edf3via
Te6edf3remote_telemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffupdate_dataTb4b4b4(Tb4b4b4)
Te6edf3telemetry Tff7b72= Te6edf3remote_telemeterTff7b72.Td2a8ffpackedTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffINSERT INTO telemetry (dest_context, ts, data) values (?, ?, ?)Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3telemetry_timestampTb4b4b4, Te6edf3telemetryTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while commiting telemetry to database: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__db_reconnectTb4b4b4(Tb4b4b4)
T8b949e# if not is_retry:
T8b949e# RNS.log("Retrying operation...", RNS.LOG_ERROR)
T8b949e# self._db_save_telemetry(context_dest, telemetry, physical_link, source_dest, via, is_retry = True)
Tff7b72return
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.last_telemetryTa5d6ff"Tb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_to_mqttTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Tff7b72def Td2a8ffmqtt_jobTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmqtt_handle_telemetryTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3telemetryTb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3mqtt_jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3telemetry
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72import T7ee787traceback
Te6edf3exception_info Tff7b72= Ta5d6ff"Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3tracebackTff7b72.Td2a8ffTracebackExceptionTff7b72.Td2a8fffrom_exceptionTb4b4b4(Te6edf3eTb4b4b4)Tff7b72.Td2a8ffformatTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffA Tffd700{Tffa657strTb4b4b4(Tffa657typeTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)Tffd700}Ta5d6ff occurred while saving telemetry to database: Tffd700{Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Te6edf3exception_infoTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdb Tff7b72= Tff7b72None
Tff7b72def Td2a8ff_db_update_appearanceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3timestampTb4b4b4, Te6edf3appearanceTb4b4b4, Te6edf3from_bulk_telemetryTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72if Te6edf3conv Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3ae Tff7b72= Tb4b4b4[Te6edf3appearanceTb4b4b4, Tffa657intTb4b4b4(Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4]
T8b949e# TODO: Clean out these temporary values at some interval.
T8b949e# Probably expire after 14 days or so.
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6ff"Ta5d6fftemp.peer_appearance.Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4, Te6edf3aeTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3data_dict Tff7b72= Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3data_dict Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3data_dict Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffappearanceTa5d6ff" Tff7b72in Te6edf3data_dictTb4b4b4:
Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffappearanceTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72if Te6edf3from_bulk_telemetry Tff7b72and Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffappearanceTa5d6ff"Tb4b4b4] Tff7b72!= Te6edf3SidebandCoreTff7b72.Td2a8ffDEFAULT_APPEARANCETb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAborting appearance update from bulk transfer, since conversation already has appearance set: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3appearanceTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff / Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffappearanceTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return
Tff7b72if Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffappearanceTa5d6ff"Tb4b4b4] Tff7b72!= Te6edf3appearanceTb4b4b4:
Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffappearanceTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3appearance
Te6edf3packed_dict Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Te6edf3data_dictTb4b4b4)
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE conv set data = ? where dest_context = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3packed_dictTb4b4b4, Te6edf3context_destTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_get_appearanceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3conv Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3rawTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3context_dest Tff7b72== Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhashTb4b4b4:
Tff7b72return Tb4b4b4[Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_iconTa5d6ff"Tb4b4b4]Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_fgTa5d6ff"Tb4b4b4]Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_bgTa5d6ff"Tb4b4b4]Tb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3data_dict Tff7b72= Tff7b72None
Tff7b72if Te6edf3conv Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3data_dict Tff7b72= Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72if Te6edf3conv Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3data_dict Tff7b72= Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3data_dict Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72if Te6edf3data_dict Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffappearanceTa5d6ff" Tff7b72in Te6edf3data_dict Tff7b72or Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffappearanceTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3apd Tff7b72= Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6ff"Ta5d6fftemp.peer_appearance.Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3apd Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffappearanceTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3apdTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not get appearance data from database: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4,Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3data_dict Tff7b72= Tff7b72None
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3data_dict Tff7b72!= Tff7b72None Tff7b72and Ta5d6ff"Ta5d6ffappearanceTa5d6ff" Tff7b72in Te6edf3data_dictTb4b4b4:
Tff7b72def Td2a8ffhtfTb4b4b4(Te6edf3cbytesTb4b4b4)Tb4b4b4:
Te6edf3d Tff7b72= T79c0ff1.0Tff7b72/T79c0ff255.0
Te6edf3r Tff7b72= Tffa657roundTb4b4b4(Te6edf3structTff7b72.Td2a8ffunpackTb4b4b4(Ta5d6ff"Ta5d6ff!BTa5d6ff"Tb4b4b4, Tffa657bytesTb4b4b4(Tb4b4b4[Te6edf3cbytesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]Tff7b72*Te6edf3dTb4b4b4, T79c0ff4Tb4b4b4)
Te6edf3g Tff7b72= Tffa657roundTb4b4b4(Te6edf3structTff7b72.Td2a8ffunpackTb4b4b4(Ta5d6ff"Ta5d6ff!BTa5d6ff"Tb4b4b4, Tffa657bytesTb4b4b4(Tb4b4b4[Te6edf3cbytesTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]Tff7b72*Te6edf3dTb4b4b4, T79c0ff4Tb4b4b4)
Te6edf3b Tff7b72= Tffa657roundTb4b4b4(Te6edf3structTff7b72.Td2a8ffunpackTb4b4b4(Ta5d6ff"Ta5d6ff!BTa5d6ff"Tb4b4b4, Tffa657bytesTb4b4b4(Tb4b4b4[Te6edf3cbytesTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]Tff7b72*Te6edf3dTb4b4b4, T79c0ff4Tb4b4b4)
Tff7b72return Tb4b4b4[Te6edf3rTb4b4b4,Te6edf3gTb4b4b4,Te6edf3bTb4b4b4]
Tff7b72if Te6edf3rawTb4b4b4:
Te6edf3appearance Tff7b72= Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffappearanceTa5d6ff"Tb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3appearance Tff7b72= Tb4b4b4[Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffappearanceTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3htfTb4b4b4(Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffappearanceTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3htfTb4b4b4(Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffappearanceTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)Tb4b4b4]
Tff7b72return Te6edf3appearance
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not retrieve appearance for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72None
Tff7b72def Td2a8ff_db_conversation_set_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3send_telemetryTff7b72=Tff7b72FalseTb4b4b4, Te6edf3is_retry Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Te6edf3data_dict Tff7b72= Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3data_dict Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3data_dict Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6fftelemetryTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3send_telemetry
Te6edf3packed_dict Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Te6edf3data_dictTb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE conv set data = ? where dest_context = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3packed_dictTb4b4b4, Te6edf3context_destTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while updating conversation telemetry options: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__db_reconnectTb4b4b4(Tb4b4b4)
T8b949e# if not is_retry:
T8b949e# RNS.log("Retrying operation...", RNS.LOG_ERROR)
T8b949e# self._db_conversation_set_telemetry(context_dest, send_telemetry, is_retry=True)
Tff7b72def Td2a8ff_db_conversation_set_requestsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3allow_requestsTff7b72=Tff7b72FalseTb4b4b4, Te6edf3is_retryTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Te6edf3data_dict Tff7b72= Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3data_dict Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3data_dict Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffallow_requestsTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3allow_requests
Te6edf3packed_dict Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Te6edf3data_dictTb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE conv set data = ? where dest_context = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3packed_dictTb4b4b4, Te6edf3context_destTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while updating conversation request options: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__db_reconnectTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3is_retryTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRetrying operation...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_requestsTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3allow_requestsTb4b4b4, Te6edf3is_retryTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ff_db_conversation_set_objectTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3is_objectTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Te6edf3data_dict Tff7b72= Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3data_dict Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3data_dict Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffis_objectTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3is_object
Te6edf3packed_dict Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Te6edf3data_dictTb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE conv set data = ? where dest_context = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3packed_dictTb4b4b4, Te6edf3context_destTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while updating conversation object option: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__db_reconnectTb4b4b4(Tb4b4b4)
T8b949e# if not is_retry:
T8b949e# RNS.log("Retrying operation...", RNS.LOG_ERROR)
T8b949e# self._db_conversation_set_object(context_dest, is_object, is_retry=True)
Tff7b72def Td2a8ff_db_conversation_set_ptt_enabledTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3ptt_enabledTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3conv Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Te6edf3data_dict Tff7b72= Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3data_dict Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3data_dict Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3data_dictTb4b4b4[Ta5d6ff"Ta5d6ffptt_enabledTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3ptt_enabled
Te6edf3packed_dict Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Te6edf3data_dictTb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE conv set data = ? where dest_context = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3packed_dictTb4b4b4, Te6edf3context_destTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while updating conversation PTT option: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__db_reconnectTb4b4b4(Tb4b4b4)
T8b949e# if not is_retry:
T8b949e# RNS.log("Retrying operation...", RNS.LOG_ERROR)
T8b949e# self._db_conversation_set_ptt_enabled(context_dest, ptt_enabled, is_retry=True)
Tff7b72def Td2a8ff_db_conversation_set_trustedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3trustedTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE conv set trust = ? where dest_context = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3trustedTb4b4b4, Te6edf3context_destTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while updating conversation trusted option: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__db_reconnectTb4b4b4(Tb4b4b4)
T8b949e# if not is_retry:
T8b949e# RNS.log("Retrying operation...", RNS.LOG_ERROR)
T8b949e# self._db_conversation_set_trusted(context_dest, trusted, is_retry=True)
Tff7b72def Td2a8ff_db_conversation_set_nameTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3nameTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE conv set name=:name_data where dest_context=:ctx;Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffctxTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4, Ta5d6ff"Ta5d6ffname_dataTa5d6ff"Tb4b4b4: Te6edf3nameTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4}Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while updating conversation name option: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__db_reconnectTb4b4b4(Tb4b4b4)
T8b949e# if not is_retry:
T8b949e# RNS.log("Retrying operation...", RNS.LOG_ERROR)
T8b949e# self._db_conversation_set_name(context_dest, name, is_retry=True)
Tff7b72def Td2a8ff_db_conversationsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3conversationsTff7b72=Tff7b72TrueTb4b4b4, Te6edf3objectsTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffselect * from convTa5d6ff"Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72< T79c0ff1Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3convs Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3entry Tff7b72in Te6edf3resultTb4b4b4:
Te6edf3is_object Tff7b72= Tff7b72False
Te6edf3last_rx Tff7b72= Te6edf3entryTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3last_tx Tff7b72= Te6edf3entryTb4b4b4[T79c0ff2Tb4b4b4]
Te6edf3last_activity Tff7b72= Tffa657maxTb4b4b4(Te6edf3last_rxTb4b4b4, Te6edf3last_txTb4b4b4)
Te6edf3data Tff7b72= Tff7b72None
Tff7b72tryTb4b4b4:
Te6edf3data Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3entryTb4b4b4[T79c0ff7Tb4b4b4]Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffis_objectTa5d6ff" Tff7b72in Te6edf3dataTb4b4b4:
Te6edf3is_object Tff7b72= Te6edf3dataTb4b4b4[Ta5d6ff"Ta5d6ffis_objectTa5d6ff"Tb4b4b4]
Tff7b72exceptTb4b4b4:
Tff7b72pass
Te6edf3conv Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffdestTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffunreadTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fflast_rxTa5d6ff"Tb4b4b4: Te6edf3last_rxTb4b4b4,
Ta5d6ff"Ta5d6fflast_txTa5d6ff"Tb4b4b4: Te6edf3last_txTb4b4b4,
Ta5d6ff"Ta5d6fflast_activityTa5d6ff"Tb4b4b4: Te6edf3last_activityTb4b4b4,
Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff4Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fftrustTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff5Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4: Te6edf3dataTb4b4b4,
Tb4b4b4}
Te6edf3should_add Tff7b72= Tff7b72False
Tff7b72if Te6edf3conversations Tff7b72and Tff7b72not Te6edf3is_objectTb4b4b4:
Te6edf3should_add Tff7b72= Tff7b72True
Tff7b72if Te6edf3objects Tff7b72and Te6edf3is_objectTb4b4b4:
Te6edf3should_add Tff7b72= Tff7b72True
Tff7b72if Te6edf3should_addTb4b4b4:
Te6edf3convsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3convTb4b4b4)
Tff7b72return Tffa657sortedTb4b4b4(Te6edf3convsTb4b4b4, Te6edf3keyTff7b72=Tff7b72lambda Te6edf3cTb4b4b4: Te6edf3cTb4b4b4[Ta5d6ff"Ta5d6fflast_activityTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3reverseTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ff_db_announcesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffselect * from announce order by received descTa5d6ff"Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72< T79c0ff1Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3announces Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3added_dests Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3entry Tff7b72in Te6edf3resultTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72not Te6edf3entryTb4b4b4[T79c0ff2Tb4b4b4] Tff7b72in Te6edf3added_destsTb4b4b4:
Te6edf3app_data Tff7b72= Te6edf3entryTb4b4b4[T79c0ff3Tb4b4b4]
Te6edf3dest_type Tff7b72= Te6edf3entryTb4b4b4[T79c0ff4Tb4b4b4]
Tff7b72if Te6edf3entryTb4b4b4[T79c0ff5Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3extras Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3entryTb4b4b4[T79c0ff5Tb4b4b4]Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffError while unpacking extras from announce: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3extras Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3extras Tff7b72= Tff7b72None
Tff7b72if Te6edf3dest_type Tff7b72== Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"Tb4b4b4:
Te6edf3announced_name Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffdisplay_name_from_app_dataTb4b4b4(Te6edf3app_dataTb4b4b4)
Te6edf3announced_cost Tff7b72= Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffget_outbound_stamp_costTb4b4b4(Te6edf3entryTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3announced_name Tff7b72= Tff7b72None
Te6edf3announced_cost Tff7b72= Tff7b72None
Te6edf3announce Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffdestTa5d6ff" Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffnameTa5d6ff" Tb4b4b4: Te6edf3announced_nameTb4b4b4,
Ta5d6ff"Ta5d6ffcostTa5d6ff" Tb4b4b4: Te6edf3announced_costTb4b4b4,
Ta5d6ff"Ta5d6fftimeTa5d6ff" Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fftypeTa5d6ff" Tb4b4b4: Te6edf3dest_typeTb4b4b4,
Ta5d6ff"Ta5d6ffextrasTa5d6ff"Tb4b4b4: Te6edf3extrasTb4b4b4,
Tb4b4b4}
Te6edf3added_destsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3entryTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)
Te6edf3announcesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3announceTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffException while fetching announce from DB: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3announcesTff7b72.Td2a8ffreverseTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3announces
Tff7b72def Td2a8ff_db_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from conv where dest_context=:ctxTa5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffctxTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4}Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72< T79c0ff1Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3c Tff7b72= Te6edf3resultTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3conv Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6ffdestTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3cTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6fflast_txTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3cTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6fflast_rxTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3cTb4b4b4[T79c0ff2Tb4b4b4]
Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6ffunreadTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3cTb4b4b4[T79c0ff3Tb4b4b4]
Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3cTb4b4b4[T79c0ff4Tb4b4b4]
Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6fftrustTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3cTb4b4b4[T79c0ff5Tb4b4b4]
Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3cTb4b4b4[T79c0ff6Tb4b4b4]Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3cTb4b4b4[T79c0ff7Tb4b4b4]Tb4b4b4)
Te6edf3convTb4b4b4[Ta5d6ff"Ta5d6fflast_activityTa5d6ff"Tb4b4b4] Tff7b72= Tffa657maxTb4b4b4(Te6edf3cTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4, Te6edf3cTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)
Tff7b72return Te6edf3conv
Tff7b72def Td2a8ff_db_clear_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffClearing conversation with Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffdelete from lxm where (dest=:ctx_dst or source=:ctx_dst);Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffctx_dstTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4}Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_clear_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffClearing telemetry for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffdelete from telemetry where dest_context=:ctx_dst;Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffctx_dstTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4}Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.last_telemetryTa5d6ff"Tb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ff_db_delete_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDeleting conversation with Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffdelete from conv where (dest_context=:ctx_dst);Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffctx_dstTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4}Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_delete_announceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDeleting announce with Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffdelete from announce where (source=:ctx_dst);Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffctx_dstTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4}Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_create_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3name Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3trust Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCreating conversation for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3def_name Tff7b72= Ta5d6ff"Ta5d6ff"Tff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffINSERT INTO conv (dest_context, last_tx, last_rx, unread, type, trust, name, data) values (?, ?, ?, ?, ?, ?, ?, ?)Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3context_destTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3SidebandCoreTff7b72.Td2a8ffCONV_P2PTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3def_nameTb4b4b4, Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Tff7b72NoneTb4b4b4)Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3trustTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_trustedTb4b4b4(Te6edf3context_destTb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72if Te6edf3name Tff7b72!= Tff7b72None Tff7b72and Te6edf3name Tff7b72!= Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_nameTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3nameTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__event_conversations_changedTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_create_voice_objectTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3identity_hashTb4b4b4, Te6edf3name Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3trust Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCreating voice object for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3identity_hashTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3def_name Tff7b72= Ta5d6ff"Ta5d6ff"Tff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffINSERT INTO conv (dest_context, last_tx, last_rx, unread, type, trust, name, data) values (?, ?, ?, ?, ?, ?, ?, ?)Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3identity_hashTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3SidebandCoreTff7b72.Td2a8ffCONV_VOICETb4b4b4, T79c0ff0Tb4b4b4, Te6edf3def_nameTb4b4b4, Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Tff7b72NoneTb4b4b4)Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3trustTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_trustedTb4b4b4(Te6edf3identity_hashTb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72if Te6edf3name Tff7b72!= Tff7b72None Tff7b72and Te6edf3name Tff7b72!= Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_conversation_set_nameTb4b4b4(Te6edf3identity_hashTb4b4b4, Te6edf3nameTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__event_conversations_changedTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_delete_messageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3msg_hashTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDeleting message Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3msg_hashTb4b4b4)Tb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffdelete from lxm where (lxm_hash=:mhash);Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffmhashTa5d6ff"Tb4b4b4: Te6edf3msg_hashTb4b4b4}Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_clean_messagesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffPurging stale messages... Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffdelete from lxm where (state=:outbound_state or state=:sending_state);Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffoutbound_stateTa5d6ff"Tb4b4b4: Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffOUTBOUNDTb4b4b4, Ta5d6ff"Ta5d6ffsending_stateTa5d6ff"Tb4b4b4: Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffSENDINGTb4b4b4}Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_clean_telemetryTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCleaning telemetry... Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3clean_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72-Tff7b72selfTff7b72.Td2a8ffTELEMETRY_KEEP
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffdelete from telemetry where (ts < Tffd700{Te6edf3clean_timeTffd700}Ta5d6ff);Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffoutbound_stateTa5d6ff"Tb4b4b4: Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffOUTBOUNDTb4b4b4, Ta5d6ff"Ta5d6ffsending_stateTa5d6ff"Tb4b4b4: Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffSENDINGTb4b4b4}Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflast_telemetry_clean Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_db_message_set_stateTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3lxm_hashTb4b4b4, Te6edf3stateTb4b4b4, Te6edf3is_retryTff7b72=Tff7b72FalseTb4b4b4, Te6edf3ratchet_idTff7b72=Tff7b72NoneTb4b4b4, Te6edf3originator_stampTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3msg_extras Tff7b72= Tff7b72None
Tff7b72if Te6edf3ratchet_id Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3msg Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_messageTb4b4b4(Te6edf3lxm_hashTb4b4b4)
Tff7b72if Te6edf3msg Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3msg_extras Tff7b72= Te6edf3msgTb4b4b4[Ta5d6ff"Ta5d6ffextrasTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3ratchet_idTb4b4b4:
Te6edf3msg_extrasTb4b4b4[Ta5d6ff"Ta5d6ffratchet_idTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3ratchet_id
Tff7b72if Te6edf3originator_stampTb4b4b4:
Te6edf3msg_extrasTb4b4b4[Ta5d6ff"Ta5d6ffstamp_checkedTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Te6edf3msg_extrasTb4b4b4[Ta5d6ff"Ta5d6ffstamp_rawTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3originator_stampTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3msg_extrasTb4b4b4[Ta5d6ff"Ta5d6ffstamp_validTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3originator_stampTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3msg_extrasTb4b4b4[Ta5d6ff"Ta5d6ffstamp_valueTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3originator_stampTb4b4b4[T79c0ff2Tb4b4b4]
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while getting message extras: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3msg_extras Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3extras Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Te6edf3msg_extrasTb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE lxm set state = ?, extra = ? where lxm_hash = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3stateTb4b4b4, Te6edf3extrasTb4b4b4, Te6edf3lxm_hashTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE lxm set state = ? where lxm_hash = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3stateTb4b4b4, Te6edf3lxm_hashTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while updating message state: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__db_reconnectTb4b4b4(Tb4b4b4)
T8b949e# if not is_retry:
T8b949e# RNS.log("Retrying operation...", RNS.LOG_ERROR)
T8b949e# self._db_message_set_state(lxm_hash, state, is_retry=True)
Tff7b72def Td2a8ff_db_message_set_methodTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3lxm_hashTb4b4b4, Te6edf3methodTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffUPDATE lxm set method = ? where lxm_hash = ?Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(Te6edf3methodTb4b4b4, Te6edf3lxm_hashTb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while updating message method: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__db_reconnectTb4b4b4(Tb4b4b4)
T8b949e# if not is_retry:
T8b949e# RNS.log("Retrying operation...", RNS.LOG_ERROR)
T8b949e# self._db_message_set_method(lxm_hash, method, is_retry=True)
Tff7b72def Td2a8ffmessageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3msg_hashTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_db_messageTb4b4b4(Te6edf3msg_hashTb4b4b4)
Tff7b72def Td2a8ff_db_messageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3msg_hashTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from lxm where lxm_hash=:mhashTa5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffmhashTa5d6ff"Tb4b4b4: Te6edf3msg_hashTb4b4b4}Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72< T79c0ff1Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3entry Tff7b72= Te6edf3resultTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3lxm_method Tff7b72= Te6edf3entryTb4b4b4[T79c0ff7Tb4b4b4]
Tff7b72if Te6edf3lxm_method Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPAPERTb4b4b4:
Te6edf3lxm_data Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3entryTb4b4b4[T79c0ff10Tb4b4b4]Tb4b4b4)
Te6edf3packed_lxm Tff7b72= Te6edf3lxm_dataTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3paper_packed_lxm Tff7b72= Te6edf3lxm_dataTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3packed_lxm Tff7b72= Te6edf3entryTb4b4b4[T79c0ff10Tb4b4b4]
Te6edf3extras Tff7b72= Tff7b72None
Tff7b72tryTb4b4b4:
Te6edf3extras Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3entryTb4b4b4[T79c0ff11Tb4b4b4]Tb4b4b4)
Tff7b72exceptTb4b4b4:
Tff7b72pass
Te6edf3lxm Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffunpack_from_bytesTb4b4b4(Te6edf3packed_lxmTb4b4b4, Te6edf3original_method Tff7b72= Te6edf3lxm_methodTb4b4b4)
Tff7b72if Te6edf3lxmTff7b72.Td2a8ffdesired_method Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPAPERTb4b4b4:
Te6edf3lxmTff7b72.Td2a8ffpaper_packed Tff7b72= Te6edf3paper_packed_lxm
Te6edf3message Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffhashTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8ffhashTb4b4b4,
Ta5d6ff"Ta5d6ffdestTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8ffdestination_hashTb4b4b4,
Ta5d6ff"Ta5d6ffsourceTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8ffsource_hashTb4b4b4,
Ta5d6ff"Ta5d6fftitleTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8fftitleTb4b4b4,
Ta5d6ff"Ta5d6ffcontentTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8ffcontentTb4b4b4,
Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff5Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffsentTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8fftimestampTb4b4b4,
Ta5d6ff"Ta5d6ffstateTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff6Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffmethodTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff7Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fflxmTa5d6ff"Tb4b4b4: Te6edf3lxmTb4b4b4,
Ta5d6ff"Ta5d6ffextrasTa5d6ff"Tb4b4b4: Te6edf3extrasTb4b4b4,
Tb4b4b4}
Tff7b72return Te6edf3message
Tff7b72def Td2a8ff_db_message_countTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect count(*) from lxm where dest=:context_dest or source=:context_destTa5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffcontext_destTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4}Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72< T79c0ff1Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Tff7b72return Te6edf3resultTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72def Td2a8ff_db_messagesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3after Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3before Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3limit Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3after Tff7b72!= Tff7b72None Tff7b72and Te6edf3before Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from lxm where (dest=:context_dest or source=:context_dest) and rx_ts>:after_tsTa5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffcontext_destTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4, Ta5d6ff"Ta5d6ffafter_tsTa5d6ff"Tb4b4b4: Te6edf3afterTb4b4b4}Tb4b4b4)
Tff7b72elif Te6edf3after Tff7b72== Tff7b72None Tff7b72and Te6edf3before Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from lxm where (dest=:context_dest or source=:context_dest) and rx_ts<:before_tsTa5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffcontext_destTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4, Ta5d6ff"Ta5d6ffbefore_tsTa5d6ff"Tb4b4b4: Te6edf3beforeTb4b4b4}Tb4b4b4)
Tff7b72elif Te6edf3after Tff7b72!= Tff7b72None Tff7b72and Te6edf3before Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from lxm where (dest=:context_dest or source=:context_dest) and rx_ts<:before_ts and rx_ts>:after_tsTa5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffcontext_destTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4, Ta5d6ff"Ta5d6ffbefore_tsTa5d6ff"Tb4b4b4: Te6edf3beforeTb4b4b4, Ta5d6ff"Ta5d6ffafter_tsTa5d6ff"Tb4b4b4: Te6edf3afterTb4b4b4}Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffselect * from lxm where dest=:context_dest or source=:context_destTa5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffcontext_destTa5d6ff"Tb4b4b4: Te6edf3context_destTb4b4b4}Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3dbcTff7b72.Td2a8fffetchallTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72< T79c0ff1Tb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3messages Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3entry Tff7b72in Te6edf3resultTb4b4b4:
Te6edf3lxm_method Tff7b72= Te6edf3entryTb4b4b4[T79c0ff7Tb4b4b4]
Tff7b72if Te6edf3lxm_method Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPAPERTb4b4b4:
Te6edf3lxm_data Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3entryTb4b4b4[T79c0ff10Tb4b4b4]Tb4b4b4)
Te6edf3packed_lxm Tff7b72= Te6edf3lxm_dataTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3paper_packed_lxm Tff7b72= Te6edf3lxm_dataTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3packed_lxm Tff7b72= Te6edf3entryTb4b4b4[T79c0ff10Tb4b4b4]
Te6edf3lxm Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffunpack_from_bytesTb4b4b4(Te6edf3packed_lxmTb4b4b4, Te6edf3original_method Tff7b72= Te6edf3lxm_methodTb4b4b4)
Tff7b72if Te6edf3lxmTff7b72.Td2a8ffdesired_method Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPAPERTb4b4b4:
Te6edf3lxmTff7b72.Td2a8ffpaper_packed Tff7b72= Te6edf3paper_packed_lxm
Te6edf3extras Tff7b72= Tff7b72None
Tff7b72tryTb4b4b4:
Te6edf3extras Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3entryTb4b4b4[T79c0ff11Tb4b4b4]Tb4b4b4)
Tff7b72exceptTb4b4b4:
Tff7b72pass
Te6edf3message Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffhashTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8ffhashTb4b4b4,
Ta5d6ff"Ta5d6ffdestTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8ffdestination_hashTb4b4b4,
Ta5d6ff"Ta5d6ffsourceTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8ffsource_hashTb4b4b4,
Ta5d6ff"Ta5d6fftitleTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8fftitleTb4b4b4,
Ta5d6ff"Ta5d6ffcontentTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8ffcontentTb4b4b4,
Ta5d6ff"Ta5d6ffreceivedTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff5Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffsentTa5d6ff"Tb4b4b4: Te6edf3lxmTff7b72.Td2a8fftimestampTb4b4b4,
Ta5d6ff"Ta5d6ffstateTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff6Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffmethodTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[T79c0ff7Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fflxmTa5d6ff"Tb4b4b4: Te6edf3lxmTb4b4b4,
Ta5d6ff"Ta5d6ffextrasTa5d6ff"Tb4b4b4: Te6edf3extrasTb4b4b4,
Tb4b4b4}
Te6edf3messagesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3messageTb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3messagesTb4b4b4) Tff7b72> Te6edf3limitTb4b4b4:
Te6edf3messages Tff7b72= Te6edf3messagesTb4b4b4[Tff7b72-Te6edf3limitTb4b4b4:Tb4b4b4]
Tff7b72return Te6edf3messages
Tff7b72def Td2a8ff_db_save_lxmTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3lxmTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3originator Tff7b72= Tff7b72FalseTb4b4b4, Te6edf3own_command Tff7b72= Tff7b72FalseTb4b4b4, Te6edf3is_retry Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3state Tff7b72= Te6edf3lxmTff7b72.Td2a8ffstate
Te6edf3packed_telemetry Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Te6edf3originator Tff7b72and Te6edf3lxmTff7b72.Td2a8fffields Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_receive_trusted_onlyTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72False Tff7b72or Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_receive_trusted_onlyTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72True Tff7b72and Tff7b72selfTff7b72.Td2a8ffis_trustedTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3LXMFTff7b72.Td2a8ffFIELD_ICON_APPEARANCE Tff7b72in Te6edf3lxmTff7b72.Td2a8fffieldsTb4b4b4:
Te6edf3peer_appearance Tff7b72= Te6edf3lxmTff7b72.Td2a8fffieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_ICON_APPEARANCETb4b4b4]
Tff7b72if Te6edf3peer_appearance Tff7b72!= Tff7b72None Tff7b72and Tffa657lenTb4b4b4(Te6edf3peer_appearanceTb4b4b4) Tff7b72> T79c0ff0 Tff7b72and Tffa657lenTb4b4b4(Te6edf3peer_appearanceTb4b4b4) Tff7b72< T79c0ff96Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_update_appearanceTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3lxmTff7b72.Td2a8fftimestampTb4b4b4, Te6edf3peer_appearanceTb4b4b4)
Tff7b72if Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRY Tff7b72in Te6edf3lxmTff7b72.Td2a8fffieldsTb4b4b4:
Te6edf3physical_link Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72if Te6edf3lxmTff7b72.Td2a8ffrssi Tff7b72or Te6edf3lxmTff7b72.Td2a8ffsnr Tff7b72or Te6edf3lxmTff7b72.Td2a8ffqTb4b4b4:
Te6edf3physical_linkTb4b4b4[Ta5d6ff"Ta5d6ffrssiTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3lxmTff7b72.Td2a8ffrssi
Te6edf3physical_linkTb4b4b4[Ta5d6ff"Ta5d6ffsnrTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3lxmTff7b72.Td2a8ffsnr
Te6edf3physical_linkTb4b4b4[Ta5d6ff"Ta5d6ffqTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3lxmTff7b72.Td2a8ffq
Te6edf3packed_telemetry Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_save_telemetryTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3lxmTff7b72.Td2a8fffieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRYTb4b4b4]Tb4b4b4, Te6edf3physical_linkTff7b72=Te6edf3physical_linkTb4b4b4, Te6edf3source_destTff7b72=Te6edf3context_destTb4b4b4)
Tff7b72if Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRY_STREAM Tff7b72in Te6edf3lxmTff7b72.Td2a8fffieldsTb4b4b4:
Te6edf3max_timebase Tff7b72= Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.timebaseTa5d6ff"Tb4b4b4) Tff7b72or T79c0ff0
Tff7b72if Te6edf3lxmTff7b72.Td2a8fffieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRY_STREAMTb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Tffa657lenTb4b4b4(Te6edf3lxmTff7b72.Td2a8fffieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRY_STREAMTb4b4b4]Tb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72for Te6edf3telemetry_entry Tff7b72in Te6edf3lxmTff7b72.Td2a8fffieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRY_STREAMTb4b4b4]Tb4b4b4:
Te6edf3tsource Tff7b72= Te6edf3telemetry_entryTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3ttstamp Tff7b72= Te6edf3telemetry_entryTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3tpacked Tff7b72= Te6edf3telemetry_entryTb4b4b4[T79c0ff2Tb4b4b4]
Te6edf3appearance Tff7b72= Te6edf3telemetry_entryTb4b4b4[T79c0ff3Tb4b4b4]
Te6edf3max_timebase Tff7b72= Tffa657maxTb4b4b4(Te6edf3max_timebaseTb4b4b4, Te6edf3ttstampTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_db_save_telemetryTb4b4b4(Te6edf3tsourceTb4b4b4, Te6edf3tpackedTb4b4b4, Te6edf3via Tff7b72= Te6edf3context_destTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffSaved telemetry stream entry from Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3tsourceTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Te6edf3appearance Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_update_appearanceTb4b4b4(Te6edf3tsourceTb4b4b4, Te6edf3ttstampTb4b4b4, Te6edf3appearanceTb4b4b4, Te6edf3from_bulk_telemetryTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffUpdated appearance entry from Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3tsourceTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.timebaseTa5d6ff"Tb4b4b4, Te6edf3max_timebaseTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffReceived telemetry stream field with no data: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3lxmTff7b72.Td2a8fffieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRY_STREAMTb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Te6edf3own_command Tff7b72or Tffa657lenTb4b4b4(Te6edf3lxmTff7b72.Td2a8ffcontentTb4b4b4) Tff7b72!= T79c0ff0 Tff7b72or Tffa657lenTb4b4b4(Te6edf3lxmTff7b72.Td2a8fftitleTb4b4b4) Tff7b72!= T79c0ff0Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3lxmTff7b72.Td2a8ffpackedTb4b4b4:
Te6edf3lxmTff7b72.Td2a8ffpackTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3lxmTff7b72.Td2a8ffmethod Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPAPERTb4b4b4:
Te6edf3packed_lxm Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Tb4b4b4[Te6edf3lxmTff7b72.Td2a8ffpackedTb4b4b4, Te6edf3lxmTff7b72.Td2a8ffpaper_packedTb4b4b4]Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3packed_lxm Tff7b72= Te6edf3lxmTff7b72.Td2a8ffpacked
Te6edf3extras Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72if Te6edf3lxmTff7b72.Td2a8ffrssi Tff7b72or Te6edf3lxmTff7b72.Td2a8ffsnr Tff7b72or Te6edf3lxmTff7b72.Td2a8ffqTb4b4b4:
Te6edf3extrasTb4b4b4[Ta5d6ff"Ta5d6ffrssiTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3lxmTff7b72.Td2a8ffrssi
Te6edf3extrasTb4b4b4[Ta5d6ff"Ta5d6ffsnrTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3lxmTff7b72.Td2a8ffsnr
Te6edf3extrasTb4b4b4[Ta5d6ff"Ta5d6ffqTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3lxmTff7b72.Td2a8ffq
Tff7b72if Te6edf3lxmTff7b72.Td2a8ffstamp_checkedTb4b4b4:
Te6edf3extrasTb4b4b4[Ta5d6ff"Ta5d6ffstamp_checkedTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Te6edf3extrasTb4b4b4[Ta5d6ff"Ta5d6ffstamp_validTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3lxmTff7b72.Td2a8ffstamp_valid
Te6edf3extrasTb4b4b4[Ta5d6ff"Ta5d6ffstamp_valueTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3lxmTff7b72.Td2a8ffstamp_value
Te6edf3extrasTb4b4b4[Ta5d6ff"Ta5d6ffstamp_rawTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3lxmTff7b72.Td2a8ffstamp
Tff7b72if Te6edf3lxmTff7b72.Td2a8ffratchet_idTb4b4b4:
Te6edf3extrasTb4b4b4[Ta5d6ff"Ta5d6ffratchet_idTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3lxmTff7b72.Td2a8ffratchet_id
Tff7b72if Te6edf3packed_telemetry Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3extrasTb4b4b4[Ta5d6ff"Ta5d6ffpacked_telemetryTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3packed_telemetry
Te6edf3extras Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Te6edf3extrasTb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffINSERT INTO lxm (lxm_hash, dest, source, title, tx_ts, rx_ts, state, method, t_encrypted, t_encryption, data, extra) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(
Te6edf3lxmTff7b72.Td2a8ffhashTb4b4b4,
Te6edf3lxmTff7b72.Td2a8ffdestination_hashTb4b4b4,
Te6edf3lxmTff7b72.Td2a8ffsource_hashTb4b4b4,
Te6edf3lxmTff7b72.Td2a8fftitleTb4b4b4,
Te6edf3lxmTff7b72.Td2a8fftimestampTb4b4b4,
Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3stateTb4b4b4,
Te6edf3lxmTff7b72.Td2a8ffmethodTb4b4b4,
Te6edf3lxmTff7b72.Td2a8fftransport_encryptedTb4b4b4,
Te6edf3lxmTff7b72.Td2a8fftransport_encryptionTb4b4b4,
Te6edf3packed_lxmTb4b4b4,
Te6edf3extras
Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while saving message to database: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__db_reconnectTb4b4b4(Tb4b4b4)
T8b949e# if not is_retry:
T8b949e# RNS.log("Retrying operation...", RNS.LOG_ERROR)
T8b949e# self._db_save_lxm(lxm, context_dest, originator = originator, own_command = own_command, is_retry = True)
T8b949e# return
Tff7b72selfTff7b72.Td2a8ff__event_conversation_changedTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72def Td2a8ff_db_save_announceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destination_hashTb4b4b4, Te6edf3app_dataTb4b4b4, Te6edf3dest_typeTff7b72=Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"Tb4b4b4, Te6edf3link_stats Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffdb_lockTb4b4b4:
Te6edf3db Tff7b72= Tff7b72selfTff7b72.Td2a8ff__db_connectTb4b4b4(Tb4b4b4)
Te6edf3dbc Tff7b72= Te6edf3dbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffdelete from announce where id is NULL or id not in (select id from announce order by received desc limit Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffMAX_ANNOUNCESTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff)Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffdelete from announce where (source=:source);Ta5d6ff"
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffsourceTa5d6ff"Tb4b4b4: Te6edf3destination_hashTb4b4b4}Tb4b4b4)
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3hash_material Tff7b72= Tffa657strTb4b4b4(Te6edf3timeTb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tff7b72+Te6edf3destination_hashTff7b72+Te6edf3app_dataTff7b72+Te6edf3dest_typeTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3announce_hash Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8fffull_hashTb4b4b4(Te6edf3hash_materialTb4b4b4)
Te6edf3extras Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6fflink_statsTa5d6ff"Tb4b4b4: Te6edf3link_statsTb4b4b4}Tb4b4b4)
Te6edf3query Tff7b72= Ta5d6ff"Ta5d6ffINSERT INTO announce (id, received, source, data, dest_type, extra) values (?, ?, ?, ?, ?, ?)Ta5d6ff"
Te6edf3data Tff7b72= Tb4b4b4(
Te6edf3announce_hashTb4b4b4,
Te6edf3nowTb4b4b4,
Te6edf3destination_hashTb4b4b4,
Te6edf3app_dataTb4b4b4,
Te6edf3dest_typeTb4b4b4,
Te6edf3extrasTb4b4b4,
Tb4b4b4)
Te6edf3dbcTff7b72.Td2a8ffexecuteTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3dbTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fflxmf_announceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3attached_interfaceTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_standalone Tff7b72or Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_require_stampsTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffset_inbound_stamp_costTb4b4b4(Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhashTb4b4b4, Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_inbound_stamp_costTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffannounceTb4b4b4(Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhashTb4b4b4, Te6edf3attached_interfaceTff7b72=Te6edf3attached_interfaceTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffset_inbound_stamp_costTb4b4b4(Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhashTb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffannounceTb4b4b4(Te6edf3attached_interfaceTff7b72=Te6edf3attached_interfaceTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflast_lxmf_announce Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffnext_auto_announce Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72+ T79c0ff60Tff7b72*Tb4b4b4(Te6edf3randomTff7b72.Td2a8ffrandomTb4b4b4(Tb4b4b4)Tff7b72*Tb4b4b4(Te6edf3SidebandCoreTff7b72.Td2a8ffAUTO_ANNOUNCE_RANDOM_MAXTff7b72-Te6edf3SidebandCoreTff7b72.Td2a8ffAUTO_ANNOUNCE_RANDOM_MINTb4b4b4)Tff7b72+Te6edf3SidebandCoreTff7b72.Td2a8ffAUTO_ANNOUNCE_RANDOM_MINTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNext auto announce in Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffnext_auto_announceTff7b72-Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.announceTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_require_stampsTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffset_inbound_stamp_costTb4b4b4(Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhashTb4b4b4, Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_inbound_stamp_costTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffset_inbound_stamp_costTb4b4b4(Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhashTb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.announceTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffrun_telemetryTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8fftelemetry_runningTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemetry_running Tff7b72= Tff7b72True
Tff7b72def Td2a8fftelemetry_jobTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72while Tff7b72selfTff7b72.Td2a8fftelemetry_runningTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffupdate_telemetryTb4b4b4(Tb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Te6edf3SidebandCoreTff7b72.Td2a8ffTELEMETRY_INTERVALTb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3telemetry_jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffrun_service_telemetryTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8fftelemetry_runningTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemetry_running Tff7b72= Tff7b72True
Tff7b72def Td2a8fftelemetry_jobTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72while Tff7b72selfTff7b72.Td2a8fftelemetry_runningTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffowner_serviceTff7b72.Td2a8ff_gps_startedTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffupdate_telemetryTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72import T7ee787traceback
Te6edf3exception_info Tff7b72= Ta5d6ff"Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3tracebackTff7b72.Td2a8ffTracebackExceptionTff7b72.Td2a8fffrom_exceptionTb4b4b4(Te6edf3eTb4b4b4)Tff7b72.Td2a8ffformatTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffAn Tffd700{Tffa657strTb4b4b4(Tffa657typeTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)Tffd700}Ta5d6ff occurred while updating service telemetry: Tffd700{Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Te6edf3exception_infoTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Te6edf3SidebandCoreTff7b72.Td2a8ffSERVICE_TELEMETRY_INTERVALTb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3telemetry_jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffstop_telemetryTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemetry_running Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffstop_allTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_telemeter_configTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.last_telemetryTa5d6ff"Tb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffmqtt_handle_telemetryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3telemetryTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffmqtt_handle_lockTb4b4b4:
T8b949e# TODO: Remove debug
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6fflast_mqtt_recycleTa5d6ff"Tb4b4b4) Tff7b72and Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72> Tff7b72selfTff7b72.Td2a8fflast_mqtt_recycle Tff7b72+ T79c0ff60Tff7b72*T79c0ff4Tb4b4b4:
T8b949e# RNS.log("Recycling MQTT handler", RNS.LOG_DEBUG)
Tff7b72selfTff7b72.Td2a8ffmqttTff7b72.Td2a8ffstopTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmqttTff7b72.Td2a8ffclient Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffmqtt Tff7b72= Tff7b72None
Te6edf3gcTff7b72.Td2a8ffcollectTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmqtt Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmqtt Tff7b72= Te6edf3MQTTTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflast_mqtt_recycle Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmqttTff7b72.Td2a8ffset_serverTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_mqtt_hostTa5d6ff"Tb4b4b4]Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_mqtt_portTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmqttTff7b72.Td2a8ffset_authTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_mqtt_userTa5d6ff"Tb4b4b4]Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_mqtt_passTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmqttTff7b72.Td2a8ffhandleTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3telemetryTb4b4b4)
T8b949e# TODO: Remove debug
T8b949e# if not hasattr(self, "memtr"):
T8b949e# from pympler import muppy
T8b949e# from pympler import summary
T8b949e# import resource
T8b949e# self.res = resource
T8b949e# self.ms = summary; self.mp = muppy
T8b949e# self.memtr = self.ms.summarize(self.mp.get_objects())
T8b949e# RNS.log(f"RSS: {RNS.prettysize(self.res.getrusage(self.res.RUSAGE_SELF).ru_maxrss*1000)}")
T8b949e# else:
T8b949e# memsum = self.ms.summarize(self.mp.get_objects())
T8b949e# memdiff = self.ms.get_diff(self.memtr, memsum)
T8b949e# self.ms.print_(memdiff)
T8b949e# RNS.log(f"RSS: {RNS.prettysize(self.res.getrusage(self.res.RUSAGE_SELF).ru_maxrss*1000)}")
Tff7b72def Td2a8ffupdate_telemetryTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3latest_telemetry Tff7b72= Te6edf3deepcopyTb4b4b4(Tff7b72selfTff7b72.Td2a8fflatest_telemetryTb4b4b4)
Tff7b72exceptTb4b4b4:
Te6edf3latest_telemetry Tff7b72= Tff7b72None
Te6edf3telemetry Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_telemetryTb4b4b4(Tb4b4b4)
Te6edf3packed_telemetry Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_packed_telemetryTb4b4b4(Tb4b4b4)
Te6edf3telemetry_changed Tff7b72= Tff7b72False
Tff7b72if Te6edf3telemetry Tff7b72!= Tff7b72None Tff7b72and Te6edf3packed_telemetry Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3latest_telemetry Tff7b72== Tff7b72None Tff7b72or Tffa657lenTb4b4b4(Te6edf3telemetryTb4b4b4) Tff7b72!= Tffa657lenTb4b4b4(Te6edf3latest_telemetryTb4b4b4)Tb4b4b4:
Te6edf3telemetry_changed Tff7b72= Tff7b72True
Tff7b72if Te6edf3latest_telemetry Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Te6edf3telemetry_changedTb4b4b4:
Tff7b72for Te6edf3sn Tff7b72in Te6edf3telemetryTb4b4b4:
Tff7b72if Te6edf3telemetry_changedTb4b4b4:
Tff7b72break
Tff7b72if Te6edf3sn Tff7b72!= Ta5d6ff"Ta5d6fftimeTa5d6ff"Tb4b4b4:
Tff7b72if Te6edf3sn Tff7b72in Te6edf3latest_telemetryTb4b4b4:
Tff7b72if Te6edf3telemetryTb4b4b4[Te6edf3snTb4b4b4] Tff7b72!= Te6edf3latest_telemetryTb4b4b4[Te6edf3snTb4b4b4]Tb4b4b4:
Te6edf3telemetry_changed Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Te6edf3telemetry_changed Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Te6edf3telemetry_changedTb4b4b4:
Tff7b72for Te6edf3sn Tff7b72in Te6edf3latest_telemetryTb4b4b4:
Tff7b72if Te6edf3telemetry_changedTb4b4b4:
Tff7b72break
Tff7b72if Te6edf3sn Tff7b72!= Ta5d6ff"Ta5d6fftimeTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3sn Tff7b72in Te6edf3telemetryTb4b4b4:
Te6edf3telemetry_changed Tff7b72= Tff7b72True
Tff7b72if Te6edf3telemetry_changedTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemetry_changes Tff7b72+Tff7b72= T79c0ff1
Tff7b72selfTff7b72.Td2a8fflatest_telemetry Tff7b72= Te6edf3telemetry
Tff7b72selfTff7b72.Td2a8fflatest_packed_telemetry Tff7b72= Te6edf3packed_telemetry
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.last_telemetryTa5d6ff"Tb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffservice_set_latest_telemetryTb4b4b4(Tff7b72selfTff7b72.Td2a8fflatest_telemetryTb4b4b4, Tff7b72selfTff7b72.Td2a8fflatest_packed_telemetryTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while sending latest telemetry to service: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72import T7ee787traceback
Te6edf3exception_info Tff7b72= Ta5d6ff"Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3tracebackTff7b72.Td2a8ffTracebackExceptionTff7b72.Td2a8fffrom_exceptionTb4b4b4(Te6edf3eTb4b4b4)Tff7b72.Td2a8ffformatTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffAn Tffd700{Tffa657strTb4b4b4(Tffa657typeTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)Tffd700}Ta5d6ff occurred while updating telemetry: Tffd700{Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Te6edf3exception_infoTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8ffupdate_telemeter_configTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_enabledTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fftelemeter Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffservice_context Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemeter Tff7b72= Te6edf3TelemeterTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemeter Tff7b72= Te6edf3TelemeterTb4b4b4(Te6edf3android_contextTff7b72=Tff7b72selfTff7b72.Td2a8ffservice_contextTb4b4b4, Te6edf3serviceTff7b72=Tff7b72TrueTb4b4b4, Te6edf3location_providerTff7b72=Tff7b72selfTff7b72.Td2a8ffowner_serviceTb4b4b4)
Te6edf3sensors Tff7b72= Tb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffinformationTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffbatteryTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffpressureTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fftemperatureTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffhumidityTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmagnetic_fieldTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffambient_lightTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffgravityTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffangular_velocityTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffaccelerationTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffproximityTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffrns_transportTa5d6ff"Tb4b4b4]
Tff7b72for Te6edf3sensor Tff7b72in Te6edf3sensorsTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_Ta5d6ff"Tff7b72+Te6edf3sensorTb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffenableTb4b4b4(Te6edf3sensorTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3sensor Tff7b72== Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4:
Tff7b72if Ta5d6ff"Ta5d6fflocationTa5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsensorsTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffactiveTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffsynthesizedTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_fixed_locationTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffdisableTb4b4b4(Te6edf3sensorTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffdisableTb4b4b4(Te6edf3sensorTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffdisableTb4b4b4(Te6edf3sensorTb4b4b4)
Tff7b72for Te6edf3telemetry_plugin Tff7b72in Tff7b72selfTff7b72.Td2a8ffactive_telemetry_pluginsTff7b72.Td2a8ffcopyTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3plugin Tff7b72= Tff7b72selfTff7b72.Td2a8ffactive_telemetry_pluginsTb4b4b4[Te6edf3telemetry_pluginTb4b4b4]
Te6edf3pluginTff7b72.Td2a8ffupdate_telemetryTb4b4b4(Tff7b72selfTff7b72.Td2a8fftelemeterTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3telemetry_pluginTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff was handling telemetry. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_fixed_locationTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tff7b72.Td2a8fflatitude Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_fixed_latlonTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tff7b72.Td2a8fflongitude Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_fixed_latlonTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffaltitude Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_fixed_altitudeTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffstale_time Tff7b72= T79c0ff12Tff7b72*T79c0ff60Tff7b72*T79c0ff60
Tff7b72if Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72> Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tff7b72.Td2a8fflast_update Tff7b72+ Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffstale_timeTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffupdate_dataTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_informationTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsynthesizeTb4b4b4(Ta5d6ff"Ta5d6ffinformationTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffsensorsTb4b4b4[Ta5d6ff"Ta5d6ffinformationTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffset_contentsTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_s_information_textTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelemeter Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fflatest_telemetry Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fflatest_packed_telemetry Tff7b72= Tff7b72None
Tff7b72def Td2a8ffget_telemetryTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_enabledTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffupdate_telemeter_configTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8fftelemeter Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_to_mqttTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72def Td2a8ffmqtt_jobTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmqtt_handle_telemetryTb4b4b4(Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhashTb4b4b4, Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffpackedTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3mqtt_jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffread_allTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Tb4b4b4{Tb4b4b4}
Tff7b72elseTb4b4b4:
Tff7b72return Tb4b4b4{Tb4b4b4}
Tff7b72def Td2a8ffget_packed_telemetryTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_enabledTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffupdate_telemeter_configTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8fftelemeter Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3packed Tff7b72= Tff7b72selfTff7b72.Td2a8fftelemeterTff7b72.Td2a8ffpackedTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3packed
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72def Td2a8ffis_knownTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dest_hashTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3source_identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Te6edf3dest_hashTb4b4b4)
Tff7b72if Te6edf3source_identityTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffrequest_keyTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dest_hashTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffrequest_pathTb4b4b4(Te6edf3dest_hashTb4b4b4)
Tff7b72return Tff7b72True
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while querying for key: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ff_update_delivery_limitsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxm_limit_1mbTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3lxm_limit Tff7b72= T79c0ff1000
Tff7b72elseTb4b4b4:
Te6edf3lxm_limit Tff7b72= Tff7b72selfTff7b72.Td2a8ffdefault_lxm_limit
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffdelivery_per_transfer_limit Tff7b72!= Te6edf3lxm_limitTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffdelivery_per_transfer_limit Tff7b72= Te6edf3lxm_limit
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffUpdated delivery limit to Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettysizeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffdelivery_per_transfer_limitTff7b72*T79c0ff1000Tb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while updating LXMF router delivery limit: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8ff_service_jobsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Te6edf3last_usb_discovery Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3last_multicast_lock_check Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72while Tff7b72TrueTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Te6edf3SidebandCoreTff7b72.Td2a8ffSERVICE_JOB_INTERVALTb4b4b4)
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3needs_if_change_announce Tff7b72= Tff7b72False
Tff7b72tryTb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6ffinterface_localTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_local Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_localTff7b72.Td2a8ffcarrier_changedTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAutoInterface carrier change detected, retaking wake locksTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffowner_serviceTff7b72.Td2a8fftake_locksTb4b4b4(Te6edf3force_multicastTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_localTff7b72.Td2a8ffcarrier_changed Tff7b72= Tff7b72False
Te6edf3last_multicast_lock_check Tff7b72= Te6edf3now
Te6edf3needs_if_change_announce Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8fflast_if_change_announce Tff7b72= T79c0ff0
Tff7b72if Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffinterface_local Tff7b72!= Tff7b72None Tff7b72and Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinterface_localTff7b72.Td2a8ffadopted_interfacesTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4) Tff7b72or Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_localTa5d6ff"Tb4b4b4] Tff7b72and Tff7b72selfTff7b72.Td2a8ffinterface_local Tff7b72== Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffinterface_local_addingTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNo suitable interfaces on AutoInterface, scheduling re-initTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_local Tff7b72in Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffinterfacesTb4b4b4:
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffinterfacesTff7b72.Td2a8ffremoveTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinterface_localTb4b4b4)
Tff7b72del Tff7b72selfTff7b72.Td2a8ffinterface_local
Tff7b72selfTff7b72.Td2a8ffinterface_local Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffinterface_local_adding Tff7b72= Tff7b72True
Tff7b72def Td2a8ffjobTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__add_localinterfaceTb4b4b4(Te6edf3delayTff7b72=T79c0ff60Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffstart_announceTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff12Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflxmf_announceTb4b4b4(Te6edf3attached_interfaceTff7b72=Tff7b72selfTff7b72.Td2a8ffinterface_localTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8fftelephoneTb4b4b4: Tff7b72selfTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffannounceTb4b4b4(Te6edf3attached_interfaceTff7b72=Tff7b72selfTff7b72.Td2a8ffinterface_localTb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6ffinterface_rnodeTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffinterface_rnode Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffhw_errorsTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6ff"Ta5d6ffruntime.errors.rnodeTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffhw_errorsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffhw_errors Tff7b72= Tb4b4b4[Tb4b4b4]
T8b949e# if not self.interface_rnode_adding:
T8b949e# RNS.log("Hardware error on RNodeInterface, scheduling re-init", RNS.LOG_DEBUG)
T8b949e# if self.interface_rnode in RNS.Transport.interfaces:
T8b949e# RNS.Transport.interfaces.remove(self.interface_rnode)
T8b949e# del self.interface_rnode
T8b949e# self.interface_rnode = None
T8b949e# self.interface_rnode_adding = True
T8b949e# def job():
T8b949e# self.__add_rnodeinterface(delay=5)
T8b949e# if self.config["start_announce"] == True:
T8b949e# time.sleep(12)
T8b949e# self.lxmf_announce(attached_interface=self.interface_rnode)
T8b949e# threading.Thread(target=job, daemon=True).start()
Tff7b72if Tb4b4b4(Te6edf3now Tff7b72- Te6edf3last_multicast_lock_check Tff7b72> T79c0ff120Tb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffChecking multicast and wake locksTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffowner_serviceTff7b72.Td2a8fftake_locksTb4b4b4(Tb4b4b4)
Te6edf3last_multicast_lock_check Tff7b72= Te6edf3now
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72import T7ee787traceback
Te6edf3exception_info Tff7b72= Ta5d6ff"Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3tracebackTff7b72.Td2a8ffTracebackExceptionTff7b72.Td2a8fffrom_exceptionTb4b4b4(Te6edf3eTb4b4b4)Tff7b72.Td2a8ffformatTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffAn Tffd700{Tffa657strTb4b4b4(Tffa657typeTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)Tffd700}Ta5d6ff occurred while running interface checks: Tffd700{Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Te6edf3exception_infoTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3announce_wanted Tff7b72= Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.announceTa5d6ff"Tb4b4b4)
Te6edf3announce_attached_interface Tff7b72= Tff7b72None
Te6edf3announce_delay Tff7b72= T79c0ff0
T8b949e# TODO: The "start_announce" config entry should be
T8b949e# renamed to "auto_announce", which is its current
T8b949e# meaning.
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffstart_announceTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6ffinterface_localTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffinterface_local Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3have_peers Tff7b72= Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinterface_localTff7b72.Td2a8ffpeersTb4b4b4) Tff7b72> T79c0ff0
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinterface_localTb4b4b4, Ta5d6ff"Ta5d6ffhad_peersTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffinterface_localTff7b72.Td2a8ffhad_peers Tff7b72and Te6edf3have_peersTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffPeers became reachable on the interface Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinterface_localTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3needs_if_change_announce Tff7b72= Tff7b72True
Te6edf3announce_attached_interface Tff7b72= Tff7b72selfTff7b72.Td2a8ffinterface_local
Te6edf3announce_delay Tff7b72= T79c0ff10
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_localTff7b72.Td2a8ffhad_peers Tff7b72and Tff7b72not Te6edf3have_peersTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNo peers reachable on the interface Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinterface_localTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3needs_if_change_announce Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffinterface_localTff7b72.Td2a8ffhad_peers Tff7b72= Te6edf3have_peers
Tff7b72for Te6edf3interface Tff7b72in Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffinterfacesTb4b4b4:
Tff7b72if Tff7b72not Tffa657hasattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6ffinterface_localTa5d6ff"Tb4b4b4) Tff7b72or Te6edf3interface Tff7b72!= Tff7b72selfTff7b72.Td2a8ffinterface_localTb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3interfaceTb4b4b4, Ta5d6ff"Ta5d6ffwas_onlineTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3interfaceTff7b72.Td2a8ffwas_online Tff7b72and Te6edf3interfaceTff7b72.Td2a8ffonlineTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffThe interface Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3interfaceTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff became availableTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3needs_if_change_announce Tff7b72= Tff7b72True
Tff7b72if Te6edf3interfaceTff7b72.Td2a8ffwas_online Tff7b72and Tff7b72not Te6edf3interfaceTff7b72.Td2a8ffonlineTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffThe interface Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3interfaceTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff became unavailableTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3needs_if_change_announce Tff7b72= Tff7b72True
Te6edf3interfaceTff7b72.Td2a8ffwas_online Tff7b72= Te6edf3interfaceTff7b72.Td2a8ffonline
Tff7b72if Te6edf3needs_if_change_announce Tff7b72and Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72> Tff7b72selfTff7b72.Td2a8fflast_if_change_announceTff7b72+Te6edf3SidebandCoreTff7b72.Td2a8ffIF_CHANGE_ANNOUNCE_MIN_INTERVALTb4b4b4:
Te6edf3announce_wanted Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8fflast_if_change_announce Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72> Tff7b72selfTff7b72.Td2a8ffnext_auto_announceTb4b4b4:
Te6edf3announce_wanted Tff7b72= Tff7b72True
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6ffinterface_rnodeTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffinterface_rnode Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bluetoothTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffallow_bluetooth Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffallow_bluetooth Tff7b72= Tff7b72False
Tff7b72if Te6edf3announce_wantedTb4b4b4:
Tff7b72def Td2a8ffgen_announce_jobTb4b4b4(Te6edf3delayTb4b4b4, Te6edf3attached_interfaceTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffxTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3aif Tff7b72= Te6edf3announce_attached_interface
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Te6edf3delayTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflxmf_announceTb4b4b4(Te6edf3attached_interfaceTff7b72=Te6edf3aifTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8fftelephoneTb4b4b4: Tff7b72selfTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffannounceTb4b4b4(Te6edf3attached_interfaceTff7b72=Te6edf3aifTb4b4b4)
Tff7b72return Te6edf3x
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3gen_announce_jobTb4b4b4(Te6edf3announce_delayTb4b4b4, Te6edf3announce_attached_interfaceTb4b4b4)Tb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.bt_onTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.bt_onTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffdiscover_usb_devicesTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffexecuting.bt_onTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_rnode Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffenable_bluetoothTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTb4b4b4, Ta5d6ff"Ta5d6ffusb_devicesTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devices Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3target_port Tff7b72= Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]
Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffAndroidTff7b72.Td2a8ffRNodeInterfaceTff7b72.Td2a8ffRNodeInterfaceTff7b72.Td2a8ffbluetooth_controlTb4b4b4(Te6edf3portTff7b72=Te6edf3target_portTb4b4b4, Te6edf3enable_bluetooth Tff7b72= Tff7b72TrueTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not execute RNode Bluetooth control command, no USB devices availableTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffexecuting.bt_onTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.bt_offTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.bt_offTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffdiscover_usb_devicesTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffexecuting.bt_offTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_rnode Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffdisable_bluetoothTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTb4b4b4, Ta5d6ff"Ta5d6ffusb_devicesTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devices Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3target_port Tff7b72= Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]
Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffAndroidTff7b72.Td2a8ffRNodeInterfaceTff7b72.Td2a8ffRNodeInterfaceTff7b72.Td2a8ffbluetooth_controlTb4b4b4(Te6edf3portTff7b72=Te6edf3target_portTb4b4b4, Te6edf3disable_bluetooth Tff7b72= Tff7b72TrueTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not execute RNode Bluetooth control command, no USB devices availableTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffexecuting.bt_offTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.bt_pairTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.bt_pairTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffdiscover_usb_devicesTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffexecuting.bt_pairTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_rnode Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffbluetooth_pairTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTb4b4b4, Ta5d6ff"Ta5d6ffusb_devicesTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devices Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3target_port Tff7b72= Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]
Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffAndroidTff7b72.Td2a8ffRNodeInterfaceTff7b72.Td2a8ffRNodeInterfaceTff7b72.Td2a8ffbluetooth_controlTb4b4b4(Te6edf3portTff7b72=Te6edf3target_portTb4b4b4, Te6edf3pairing_mode Tff7b72= Tff7b72TrueTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffhardware_operation.errorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffAn error occurred while trying to communicate with the device. Please make sure that Sideband has been granted permissions to access the device.Tffea00\nTffea00\nTa5d6ffThe reported error was:Tffea00\nTffea00\nTa5d6ff[i]Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff[/i]Ta5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not execute RNode Bluetooth control command, no USB devices availableTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffexecuting.bt_pairTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3now Tff7b72- Te6edf3last_usb_discovery Tff7b72> T79c0ff5Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_rnode Tff7b72!= Tff7b72None Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffonlineTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffdiscover_usb_devicesTb4b4b4(Tb4b4b4)
Te6edf3last_usb_discovery Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTb4b4b4, Ta5d6ff"Ta5d6ffusb_devicesTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devices Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3target_device Tff7b72= Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffport Tff7b72!= Te6edf3target_deviceTb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffUpdating RNode device to Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3target_deviceTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffport Tff7b72= Te6edf3target_deviceTb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_serial Tff7b72!= Tff7b72None Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffinterface_serialTff7b72.Td2a8ffonlineTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffdiscover_usb_devicesTb4b4b4(Tb4b4b4)
Te6edf3last_usb_discovery Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTb4b4b4, Ta5d6ff"Ta5d6ffusb_devicesTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devices Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3target_device Tff7b72= Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_serialTff7b72.Td2a8ffport Tff7b72!= Te6edf3target_deviceTb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffUpdating serial device to Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3target_deviceTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_serialTff7b72.Td2a8ffport Tff7b72= Te6edf3target_deviceTb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_modem Tff7b72!= Tff7b72None Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffinterface_modemTff7b72.Td2a8ffonlineTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffdiscover_usb_devicesTb4b4b4(Tb4b4b4)
Te6edf3last_usb_discovery Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTb4b4b4, Ta5d6ff"Ta5d6ffusb_devicesTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devices Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3target_device Tff7b72= Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_modemTff7b72.Td2a8ffport Tff7b72!= Te6edf3target_deviceTb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffUpdating modem device to Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3target_deviceTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_modemTff7b72.Td2a8ffport Tff7b72= Te6edf3target_deviceTb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]
Tff7b72def Td2a8ff_periodic_jobsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_service Tff7b72or Tff7b72selfTff7b72.Td2a8ffis_standaloneTb4b4b4:
Tff7b72while Tff7b72TrueTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Te6edf3SidebandCoreTff7b72.Td2a8ffPERIODIC_JOBS_INTERVALTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffowner_service Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffowner_serviceTff7b72.Td2a8ffupdate_location_providerTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_update_delivery_limitsTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_periodic_syncTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6ff"Ta5d6fflxmf.lastsyncTa5d6ff"Tb4b4b4) Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6ff"Ta5d6fflxmf.lastsyncTa5d6ff"Tb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3syncinterval Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_sync_intervalTa5d6ff"Tb4b4b4]
Te6edf3lastsync Tff7b72= Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6ff"Ta5d6fflxmf.lastsyncTa5d6ff"Tb4b4b4)
Te6edf3nextsync Tff7b72= Te6edf3lastsyncTff7b72+Te6edf3syncinterval
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffLast LXMF sync was Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3nowTff7b72-Te6edf3lastsyncTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff agoTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNext LXMF sync is Ta5d6ff"Tff7b72+Tb4b4b4(Ta5d6ff"Ta5d6ffin Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3nextsyncTff7b72-Te6edf3nowTb4b4b4) Tff7b72if Te6edf3nextsyncTff7b72-Te6edf3now Tff7b72> T79c0ff0 Tff7b72else Ta5d6ff"Ta5d6ffnowTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4)
Tff7b72if Te6edf3now Tff7b72> Te6edf3nextsyncTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrequest_lxmf_syncTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffScheduled LXMF sync succeededTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6ff"Ta5d6fflxmf.lastsyncTa5d6ff"Tb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6ff"Ta5d6fflxmf.syncretryingTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6ff"Ta5d6fflxmf.syncretryingTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffScheduled LXMF sync failed, retrying in Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3SidebandCoreTff7b72.Td2a8ffPERIODIC_SYNC_RETRYTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6ff"Ta5d6fflxmf.lastsyncTa5d6ff"Tb4b4b4, Te6edf3lastsyncTff7b72+Te6edf3SidebandCoreTff7b72.Td2a8ffPERIODIC_SYNC_RETRYTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6ff"Ta5d6fflxmf.syncretryingTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRetry of scheduled LXMF sync failed too, waiting until next scheduled sync to try againTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6ff"Ta5d6fflxmf.lastsyncTa5d6ff"Tb4b4b4, Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6ff"Ta5d6fflxmf.syncretryingTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_enabledTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72if Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72-Tff7b72selfTff7b72.Td2a8fflast_telemetry_clean Tff7b72> Tff7b72selfTff7b72.Td2a8fftelemetry_clean_intervalTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_clean_telemetryTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_to_collectorTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_collectorTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_collectorTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhashTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3collector_address Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_collectorTa5d6ff"Tb4b4b4]
Te6edf3last_send_timebase Tff7b72= Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3collector_addressTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.last_send_success_timebaseTa5d6ff"Tb4b4b4) Tff7b72or T79c0ff0
Te6edf3send_interval Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_intervalTa5d6ff"Tb4b4b4]
Te6edf3next_send Tff7b72= Te6edf3last_send_timebaseTff7b72+Te6edf3send_interval
Te6edf3scheduled Tff7b72= Te6edf3next_sendTff7b72-Te6edf3nowTb4b4b4; Te6edf3blocked Tff7b72= Tff7b72selfTff7b72.Td2a8fftelemetry_send_blocked_untilTff7b72-Te6edf3now
Te6edf3next_send_in Tff7b72= Tffa657maxTb4b4b4(Te6edf3scheduledTb4b4b4, Te6edf3blockedTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffLast telemetry send was Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3nowTff7b72-Te6edf3last_send_timebaseTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff agoTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNext telemetry send is Ta5d6ff"Tff7b72+Tb4b4b4(Ta5d6ff"Ta5d6ffin Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3next_send_inTb4b4b4) Tff7b72if Te6edf3next_send_in Tff7b72> T79c0ff0 Tff7b72else Ta5d6ff"Ta5d6ffnowTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4)
Tff7b72if Te6edf3now Tff7b72> Te6edf3last_send_timebaseTff7b72+Te6edf3send_interval Tff7b72and Te6edf3now Tff7b72> Tff7b72selfTff7b72.Td2a8fftelemetry_send_blocked_untilTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffInitiating telemetry send to collectorTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffpending_telemetry_send_try Tff7b72>Tff7b72= Tff7b72selfTff7b72.Td2a8ffpending_telemetry_send_maxtriesTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpending_telemetry_send Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffpending_telemetry_send_try Tff7b72+Tff7b72= T79c0ff1
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_all_to_collectorTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3last_timebase Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3collector_addressTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.last_send_success_timebaseTa5d6ff"Tb4b4b4) Tff7b72or T79c0ff0Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcreate_telemetry_collector_responseTb4b4b4(Te6edf3to_addrTff7b72=Te6edf3collector_addressTb4b4b4, Te6edf3timebaseTff7b72=Te6edf3last_timebaseTb4b4b4, Te6edf3is_authorized_telemetry_requestTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsend_latest_telemetryTb4b4b4(Te6edf3to_addrTff7b72=Te6edf3collector_addressTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fftelemetry_send_blocked_until Tff7b72< Te6edf3nowTb4b4b4:
Te6edf3next_slot Tff7b72= Te6edf3nowTff7b72+Te6edf3send_interval
Tff7b72selfTff7b72.Td2a8fftelemetry_send_blocked_until Tff7b72= Te6edf3next_slot
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffSending telemetry to collector failed after Tffd700{Tff7b72selfTff7b72.Td2a8ffpending_telemetry_send_tryTffd700}Ta5d6ff tries.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffNot scheduling further retries until next send slot in Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3next_slotTff7b72-Te6edf3nowTb4b4b4)Tffd700}Ta5d6ff.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpending_telemetry_send_try Tff7b72= T79c0ff0
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while sending scheduled telemetry to collector: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_request_from_collectorTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_collectorTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_collectorTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhashTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3collector_address Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_collectorTa5d6ff"Tb4b4b4]
Te6edf3last_request_timebase Tff7b72= Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3collector_addressTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.last_request_success_timebaseTa5d6ff"Tb4b4b4) Tff7b72or T79c0ff0
Te6edf3request_interval Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_request_intervalTa5d6ff"Tb4b4b4]
Te6edf3next_request Tff7b72= Te6edf3last_request_timebaseTff7b72+Te6edf3request_interval
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffLast telemetry request was Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3nowTff7b72-Te6edf3last_request_timebaseTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff agoTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNext telemetry request is Ta5d6ff"Tff7b72+Tb4b4b4(Ta5d6ff"Ta5d6ffin Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettytimeTb4b4b4(Te6edf3next_requestTff7b72-Te6edf3nowTb4b4b4) Tff7b72if Te6edf3next_requestTff7b72-Te6edf3now Tff7b72> T79c0ff0 Tff7b72else Ta5d6ff"Ta5d6ffnowTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4)
Tff7b72if Te6edf3now Tff7b72> Te6edf3last_request_timebaseTff7b72+Te6edf3request_intervalTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffInitiating telemetry request to collectorTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrequest_latest_telemetryTb4b4b4(Te6edf3from_addrTff7b72=Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_collectorTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while requesting a telemetry update from collector. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while requesting scheduled telemetry from collector: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3stale_entries Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8fflive_tracked_objectsTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3object_hash Tff7b72in Tff7b72selfTff7b72.Td2a8fflive_tracked_objectsTb4b4b4:
Te6edf3tracking_entry Tff7b72= Tff7b72selfTff7b72.Td2a8fflive_tracked_objectsTb4b4b4[Te6edf3object_hashTb4b4b4]
Te6edf3tracking_int Tff7b72= Te6edf3tracking_entryTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3tracking_last Tff7b72= Te6edf3tracking_entryTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3tracking_end Tff7b72= Te6edf3tracking_entryTb4b4b4[T79c0ff2Tb4b4b4]
Tff7b72if Te6edf3now Tff7b72< Te6edf3tracking_endTb4b4b4:
Tff7b72if Te6edf3now Tff7b72> Te6edf3tracking_lastTff7b72+Te6edf3tracking_intTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNext live tracking request time reached for Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3object_hashTb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrequest_latest_telemetryTb4b4b4(Te6edf3from_addrTff7b72=Te6edf3object_hashTb4b4b4, Te6edf3is_livetrackTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3tracking_entryTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3stale_entriesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3object_hashTb4b4b4)
Tff7b72for Te6edf3object_hash Tff7b72in Te6edf3stale_entriesTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffTerminating live tracking for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3object_hashTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff, tracking duration reachedTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflive_tracked_objectsTff7b72.Td2a8ffpopTb4b4b4(Te6edf3object_hashTb4b4b4)
Tff7b72def Td2a8ff__start_jobs_deferredTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffservice_thread Tff7b72= Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Tff7b72selfTff7b72.Td2a8ff_service_jobsTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffservice_threadTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_standalone Tff7b72or Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffstart_announceTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72def Td2a8ffdaTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff8Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflxmf_announceTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8fftelephoneTb4b4b4: Tff7b72selfTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffannounceTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflast_if_change_announce Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3daTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffperiodic_thread Tff7b72= Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Tff7b72selfTff7b72.Td2a8ff_periodic_jobsTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffperiodic_threadTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_standalone Tff7b72or Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_enabledTa5d6ff"Tb4b4b4]Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffrun_telemetryTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_enabledTa5d6ff"Tb4b4b4]Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffstart_voiceTb4b4b4(Tb4b4b4)
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrun_service_telemetryTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff__add_localinterfaceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3delayTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinterface_local_adding Tff7b72= Tff7b72True
Tff7b72if Te6edf3delayTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Te6edf3delayTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAdding Auto Interface...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_groupidTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3group_id Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3group_id Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_groupidTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_ifac_netnameTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_ifac_passphraseTa5d6ff"Tb4b4b4]
Te6edf3interface_config Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffAutoInterfaceTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffgroup_idTa5d6ff"Tb4b4b4: Te6edf3group_id
Tb4b4b4}
Te6edf3autointerface Tff7b72= Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffAutoInterfaceTff7b72.Td2a8ffAutoInterfaceTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Te6edf3interface_configTb4b4b4)
Te6edf3autointerfaceTff7b72.Td2a8ffOUT Tff7b72= Tff7b72True
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8fftransport_enabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_FULL
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_localTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffgatewayTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_GATEWAY
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_localTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffaccess pointTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ACCESS_POINT
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_localTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffroamingTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ROAMING
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_localTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffboundaryTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_BOUNDARY
Tff7b72elseTb4b4b4:
Te6edf3if_mode Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffreticulumTff7b72.Td2a8ff_add_interfaceTb4b4b4(Te6edf3autointerfaceTb4b4b4, Te6edf3mode Tff7b72= Te6edf3if_modeTb4b4b4, Te6edf3ifac_netname Tff7b72= Te6edf3ifac_netnameTb4b4b4, Te6edf3ifac_netkey Tff7b72= Te6edf3ifac_netkeyTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_local Tff7b72= Te6edf3autointerface
Tff7b72selfTff7b72.Td2a8ffinterface_local_adding Tff7b72= Tff7b72False
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while adding AutoInterface. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_local Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffinterface_local_adding Tff7b72= Tff7b72False
Tff7b72def Td2a8ff__add_rnodeinterfaceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3delayTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinterface_rnode_adding Tff7b72= Tff7b72True
Tff7b72if Te6edf3delayTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Te6edf3delayTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAdding RNode Interface...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3target_device Tff7b72= Tff7b72None
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
T8b949e# TODO: Add more intelligent selection here
Te6edf3target_device Tff7b72= Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4[T79c0ff0Tb4b4b4]
T8b949e# if target_device or self.config["hw_rnode_bluetooth"]:
Tff7b72if Te6edf3target_device Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3target_port Tff7b72= Te6edf3target_deviceTb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3target_port Tff7b72= Tff7b72None
Te6edf3bt_device_name Tff7b72= Tff7b72None
Te6edf3rnode_allow_bluetooth Tff7b72= Tff7b72False
Te6edf3rnode_allow_ble Tff7b72= Tff7b72False
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6ff"Ta5d6ffpermissions.bluetoothTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bluetoothTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAllowing RNode bluetoothTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3rnode_allow_bluetooth Tff7b72= Tff7b72True
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bt_deviceTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3bt_device_name Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bt_deviceTa5d6ff"Tb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDisallowing RNode bluetooth since config is disabledTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3rnode_allow_bluetooth Tff7b72= Tff7b72False
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bleTa5d6ff"Tb4b4b4] Tff7b72and Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6ff"Ta5d6ffpermissions.bluetoothTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAllowing RNode BLETa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3rnode_allow_ble Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDisallowing RNode BLETa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3rnode_allow_ble Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDisallowing RNode bluetooth due to missing permissionTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3rnode_allow_bluetooth Tff7b72= Tff7b72False
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_rnode_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_rnode_ifac_netnameTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_rnode_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_rnode_ifac_passphraseTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_atl_shortTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3atl_short Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3atl_short Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_atl_shortTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_atl_longTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3atl_long Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3atl_long Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_atl_longTa5d6ff"Tb4b4b4]
Te6edf3interface_config Tff7b72= Tff7b72None
Tff7b72if Te6edf3rnode_allow_bleTb4b4b4:
Te6edf3interface_config Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffRNodeInterfaceTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4,
Ta5d6ff"Ta5d6fffrequencyTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_frequencyTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffbandwidthTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bandwidthTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fftxpowerTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_tx_powerTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffspreadingfactorTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_spreading_factorTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffcodingrateTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_coding_rateTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffflow_controlTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4,
Ta5d6ff"Ta5d6ffid_intervalTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_beaconintervalTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffid_callsignTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_beacondataTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffst_alockTa5d6ff"Tb4b4b4: Te6edf3atl_shortTb4b4b4,
Ta5d6ff"Ta5d6fflt_alockTa5d6ff"Tb4b4b4: Te6edf3atl_longTb4b4b4,
Ta5d6ff"Ta5d6ffallow_bluetoothTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4,
Ta5d6ff"Ta5d6fftarget_device_nameTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4,
Ta5d6ff"Ta5d6ffforce_bleTa5d6ff"Tb4b4b4: Tff7b72TrueTb4b4b4,
Ta5d6ff"Ta5d6ffble_nameTa5d6ff"Tb4b4b4: Te6edf3bt_device_nameTb4b4b4,
Ta5d6ff"Ta5d6ffble_addrTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4,
Tb4b4b4}
Tff7b72elseTb4b4b4:
Te6edf3interface_config Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffRNodeInterfaceTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4: Te6edf3target_portTb4b4b4,
Ta5d6ff"Ta5d6fffrequencyTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_frequencyTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffbandwidthTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_bandwidthTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fftxpowerTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_tx_powerTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffspreadingfactorTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_spreading_factorTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffcodingrateTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_coding_rateTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffflow_controlTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4,
Ta5d6ff"Ta5d6ffid_intervalTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_beaconintervalTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffid_callsignTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_beacondataTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffst_alockTa5d6ff"Tb4b4b4: Te6edf3atl_shortTb4b4b4,
Ta5d6ff"Ta5d6fflt_alockTa5d6ff"Tb4b4b4: Te6edf3atl_longTb4b4b4,
Ta5d6ff"Ta5d6ffallow_bluetoothTa5d6ff"Tb4b4b4: Te6edf3rnode_allow_bluetoothTb4b4b4,
Ta5d6ff"Ta5d6fftarget_device_nameTa5d6ff"Tb4b4b4: Te6edf3bt_device_nameTb4b4b4,
Ta5d6ff"Ta5d6ffforce_bleTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4,
Ta5d6ff"Ta5d6ffble_nameTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4,
Ta5d6ff"Ta5d6ffble_addrTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4,
Tb4b4b4}
Te6edf3rnodeinterface Tff7b72= Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffAndroidTff7b72.Td2a8ffRNodeInterfaceTff7b72.Td2a8ffRNodeInterfaceTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Te6edf3interface_configTb4b4b4)
Te6edf3rnodeinterfaceTff7b72.Td2a8ffOUT Tff7b72= Tff7b72True
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8fftransport_enabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_FULL
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_rnodeTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffgatewayTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_GATEWAY
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_rnodeTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffaccess pointTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ACCESS_POINT
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_rnodeTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffroamingTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ROAMING
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_rnodeTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffboundaryTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_BOUNDARY
Tff7b72elseTb4b4b4:
Te6edf3if_mode Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffreticulumTff7b72.Td2a8ff_add_interfaceTb4b4b4(Te6edf3rnodeinterfaceTb4b4b4, Te6edf3mode Tff7b72= Te6edf3if_modeTb4b4b4, Te6edf3ifac_netname Tff7b72= Te6edf3ifac_netnameTb4b4b4, Te6edf3ifac_netkey Tff7b72= Te6edf3ifac_netkeyTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_rnode Tff7b72= Te6edf3rnodeinterface
Tff7b72selfTff7b72.Td2a8ffinterface_rnode_adding Tff7b72= Tff7b72False
Tff7b72if Te6edf3rnodeinterface Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3rnodeinterfaceTff7b72.Td2a8ffhw_errorsTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6ff"Ta5d6ffstartup.errors.rnodeTa5d6ff"Tb4b4b4, Te6edf3rnodeinterfaceTff7b72.Td2a8ffhw_errorsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_rnode_enable_framebufferTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffonlineTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffdisplay_imageTb4b4b4(Te6edf3sideband_fb_dataTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffenable_external_framebufferTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8fflast_imagedata Tff7b72= Te6edf3sideband_fb_data
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffonlineTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinterface_rnodeTff7b72.Td2a8ffdisable_external_framebufferTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while adding RNode Interface. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_rnode Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffinterface_rnode_adding Tff7b72= Tff7b72False
Tff7b72def Td2a8ff_reticulum_log_debugTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3debugTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fflog_verbose Tff7b72= Te6edf3debug
Tff7b72if Tff7b72selfTff7b72.Td2a8fflog_quietTb4b4b4: Te6edf3selected_level Tff7b72= T79c0ff0
Tff7b72elif Tff7b72selfTff7b72.Td2a8fflog_verboseTb4b4b4: Te6edf3selected_level Tff7b72= T79c0ff6
Tff7b72elseTb4b4b4: Te6edf3selected_level Tff7b72= T79c0ff2
Te6edf3RNSTff7b72.Td2a8ffloglevel Tff7b72= Te6edf3selected_level
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffservice_rpc_set_debugTb4b4b4(Te6edf3debugTb4b4b4)
Tff7b72def Td2a8ff_log_handlerTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3messageTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fflog_dequeTff7b72.Td2a8ffappendTb4b4b4(Te6edf3messageTb4b4b4)
Tffa657printTb4b4b4(Te6edf3messageTb4b4b4)
T8b949e# TODO: Get service log on Android
Tff7b72def Td2a8ffget_logTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Ta5d6ff"Tffea00\nTa5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8fflog_dequeTb4b4b4)
Tff7b72def Td2a8ff__start_jobs_immediateTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fflog_quietTb4b4b4:
Te6edf3selected_level Tff7b72= T79c0ff0
Tff7b72elif Tff7b72selfTff7b72.Td2a8fflog_verboseTb4b4b4:
Te6edf3selected_level Tff7b72= T79c0ff6
Tff7b72elseTb4b4b4:
Te6edf3selected_level Tff7b72= T79c0ff2
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffinit.loadingstateTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffSubstantiating ReticulumTa5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffreticulum Tff7b72= Te6edf3RNSTff7b72.Td2a8ffReticulumTb4b4b4(Te6edf3configdirTff7b72=Tff7b72selfTff7b72.Td2a8ffrns_configdirTb4b4b4, Te6edf3loglevelTff7b72=Te6edf3selected_levelTb4b4b4, Te6edf3logdestTff7b72=Tff7b72selfTff7b72.Td2a8ff_log_handlerTb4b4b4)
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrns_configdirTff7b72+Ta5d6ff"Ta5d6ff/config_template_invalidTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffunlinkTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrns_configdirTff7b72+Ta5d6ff"Ta5d6ff/config_template_invalidTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72pass
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffError while instantiating Reticulum: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffLocal configuration template changes will be ignored on next startTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3exitTb4b4b4(T79c0ff255Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff__start_rpc_listenerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
T8b949e# TODO: Just log to console for, but add option to export log
T8b949e# files at some point.
T8b949e# if self.config["debug"]:
T8b949e# self.reticulum.logdest = RNS.LOG_FILE
T8b949e# if not self.reticulum.is_connected_to_shared_instance:
T8b949e# self.reticulum.logfile = self.log_dir+"sideband_service.log"
T8b949e# else:
T8b949e# self.reticulum.logfile = self.log_dir+"sideband_core.log"
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffreticulumTff7b72.Td2a8ffis_connected_to_shared_instanceTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRunning as master or standalone instance, adding interfacesTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_local Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffinterface_tcp Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffinterface_i2p Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffinterface_rnode Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffinterface_modem Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffinterface_serial Tff7b72= Tff7b72None
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_localTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffinit.loadingstateTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffDiscovering TopographyTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__add_localinterfaceTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcpTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffinit.loadingstateTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffConnecting TCP TunnelTa5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAdding TCP Interface...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_hostTa5d6ff"Tb4b4b4] Tff7b72!= Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3tcp_host Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_hostTa5d6ff"Tb4b4b4]
Te6edf3tcp_port Tff7b72= Tffa657intTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_portTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72if Te6edf3tcp_port Tff7b72> T79c0ff0 Tff7b72and Te6edf3tcp_port Tff7b72<Tff7b72= T79c0ff65536Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_ifac_netnameTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_ifac_passphraseTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3ifac_netname Tff7b72!= Tff7b72None Tff7b72or Te6edf3ifac_netkey Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3ifac_size Tff7b72= T79c0ff16
Tff7b72elseTb4b4b4:
Te6edf3ifac_size Tff7b72= Tff7b72None
Te6edf3interface_config Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffTCP ClientTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftarget_hostTa5d6ff"Tb4b4b4: Te6edf3tcp_hostTb4b4b4,
Ta5d6ff"Ta5d6fftarget_portTa5d6ff"Tb4b4b4: Te6edf3tcp_portTb4b4b4,
Ta5d6ff"Ta5d6ffkiss_framingTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4,
Ta5d6ff"Ta5d6ffi2p_tunneledTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4,
Tb4b4b4}
Te6edf3tcpinterface Tff7b72= Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffBackboneInterfaceTff7b72.Td2a8ffBackboneClientInterfaceTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Te6edf3interface_configTb4b4b4)
Te6edf3tcpinterfaceTff7b72.Td2a8ffOUT Tff7b72= Tff7b72True
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8fftransport_enabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_FULL
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_tcpTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffgatewayTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_GATEWAY
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_tcpTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffaccess pointTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ACCESS_POINT
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_tcpTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffroamingTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ROAMING
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_tcpTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffboundaryTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_BOUNDARY
Tff7b72elseTb4b4b4:
Te6edf3if_mode Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffreticulumTff7b72.Td2a8ff_add_interfaceTb4b4b4(Te6edf3tcpinterfaceTb4b4b4, Te6edf3modeTff7b72=Te6edf3if_modeTb4b4b4, Te6edf3ifac_netnameTff7b72=Te6edf3ifac_netnameTb4b4b4, Te6edf3ifac_netkeyTff7b72=Te6edf3ifac_netkeyTb4b4b4, Te6edf3ifac_sizeTff7b72=Te6edf3ifac_sizeTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_tcp Tff7b72= Te6edf3tcpinterface
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while adding TCP Interface. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_tcp Tff7b72= Tff7b72None
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2pTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffinit.loadingstateTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffOpening I2P EndpointsTa5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAdding I2P Interface...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_b32Ta5d6ff"Tb4b4b4]Tff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6ff.b32.i2pTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_ifac_netnameTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_ifac_passphraseTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3ifac_netname Tff7b72!= Tff7b72None Tff7b72or Te6edf3ifac_netkey Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3ifac_size Tff7b72= T79c0ff16
Tff7b72elseTb4b4b4:
Te6edf3ifac_size Tff7b72= Tff7b72None
Te6edf3interface_config Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffI2PInterfaceTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffstoragepathTa5d6ff"Tb4b4b4: Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffstoragepathTb4b4b4,
Ta5d6ff"Ta5d6ffpeersTa5d6ff"Tb4b4b4: Tb4b4b4[Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_b32Ta5d6ff"Tb4b4b4]Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffconnectableTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4,
Tb4b4b4}
Te6edf3i2pinterface Tff7b72= Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffI2PInterfaceTff7b72.Td2a8ffI2PInterfaceTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Te6edf3interface_configTb4b4b4)
Te6edf3i2pinterfaceTff7b72.Td2a8ffOUT Tff7b72= Tff7b72True
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8fftransport_enabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_FULL
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_i2pTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffgatewayTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_GATEWAY
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_i2pTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffaccess pointTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ACCESS_POINT
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_i2pTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffroamingTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ROAMING
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_i2pTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffboundaryTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_BOUNDARY
Tff7b72elseTb4b4b4:
Te6edf3if_mode Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffreticulumTff7b72.Td2a8ff_add_interfaceTb4b4b4(Te6edf3i2pinterfaceTb4b4b4, Te6edf3mode Tff7b72= Te6edf3if_modeTb4b4b4, Te6edf3ifac_netnameTff7b72=Te6edf3ifac_netnameTb4b4b4, Te6edf3ifac_netkeyTff7b72=Te6edf3ifac_netkeyTb4b4b4, Te6edf3ifac_sizeTff7b72=Te6edf3ifac_sizeTb4b4b4)
Tff7b72for Te6edf3si Tff7b72in Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffinterfacesTb4b4b4:
Tff7b72if Tffa657typeTb4b4b4(Te6edf3siTb4b4b4) Tff7b72== Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffI2PInterfaceTff7b72.Td2a8ffI2PInterfacePeerTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinterface_i2p Tff7b72= Te6edf3si
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while adding I2P Interface. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_i2p Tff7b72= Tff7b72None
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_rnodeTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffinit.loadingstateTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffStarting RNodeTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__add_rnodeinterfaceTb4b4b4(Tb4b4b4)
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_serialTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffinit.loadingstateTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffStarting Serial InterfaceTa5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAdding Serial Interface...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3target_device Tff7b72= Tff7b72None
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
T8b949e# TODO: Add more intelligent selection here
Te6edf3target_device Tff7b72= Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Te6edf3target_deviceTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_serial_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_serial_ifac_netnameTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_serial_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_serial_ifac_passphraseTa5d6ff"Tb4b4b4]
Te6edf3interface_config Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffSerialInterfaceTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4: Te6edf3target_deviceTb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffspeedTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_baudrateTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffdatabitsTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_databitsTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffparityTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_parityTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffstopbitsTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_serial_stopbitsTa5d6ff"Tb4b4b4]Tb4b4b4,
Tb4b4b4}
Te6edf3serialinterface Tff7b72= Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffAndroidTff7b72.Td2a8ffSerialInterfaceTff7b72.Td2a8ffSerialInterfaceTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Te6edf3interface_configTb4b4b4)
Te6edf3serialinterfaceTff7b72.Td2a8ffOUT Tff7b72= Tff7b72True
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8fftransport_enabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_FULL
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_serialTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffgatewayTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_GATEWAY
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_serialTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffaccess pointTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ACCESS_POINT
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_serialTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffroamingTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ROAMING
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_serialTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffboundaryTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_BOUNDARY
Tff7b72elseTb4b4b4:
Te6edf3if_mode Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffreticulumTff7b72.Td2a8ff_add_interfaceTb4b4b4(Te6edf3serialinterfaceTb4b4b4, Te6edf3mode Tff7b72= Te6edf3if_modeTb4b4b4, Te6edf3ifac_netname Tff7b72= Te6edf3ifac_netnameTb4b4b4, Te6edf3ifac_netkey Tff7b72= Te6edf3ifac_netkeyTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_serial Tff7b72= Te6edf3serialinterface
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while adding Serial Interface. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_serial Tff7b72= Tff7b72None
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_modemTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffinit.loadingstateTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffStarting Radio ModemTa5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAdding Modem Interface...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3target_device Tff7b72= Tff7b72None
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
T8b949e# TODO: Add more intelligent selection here
Te6edf3target_device Tff7b72= Tff7b72selfTff7b72.Td2a8ffowner_appTff7b72.Td2a8ffusb_devicesTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Te6edf3target_deviceTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_modem_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netname Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_modem_ifac_netnameTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_modem_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3ifac_netkey Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_modem_ifac_passphraseTa5d6ff"Tb4b4b4]
Te6edf3interface_config Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffModemInterfaceTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4: Te6edf3target_deviceTb4b4b4[Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffspeedTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_baudrateTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffdatabitsTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_databitsTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffparityTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_parityTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffstopbitsTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_stopbitsTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffpreambleTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_preambleTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fftxtailTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_tailTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffpersistenceTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_persistenceTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffslottimeTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_slottimeTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffflow_controlTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4,
Ta5d6ff"Ta5d6ffbeacon_intervalTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_beaconintervalTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffbeacon_dataTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffhw_modem_beacondataTa5d6ff"Tb4b4b4]Tb4b4b4,
Tb4b4b4}
Te6edf3modeminterface Tff7b72= Te6edf3RNSTff7b72.Td2a8ffInterfacesTff7b72.Td2a8ffAndroidTff7b72.Td2a8ffKISSInterfaceTff7b72.Td2a8ffKISSInterfaceTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffTransportTb4b4b4, Te6edf3interface_configTb4b4b4)
Te6edf3modeminterfaceTff7b72.Td2a8ffOUT Tff7b72= Tff7b72True
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8fftransport_enabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_FULL
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_modemTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffgatewayTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_GATEWAY
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_modemTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffaccess pointTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ACCESS_POINT
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_modemTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffroamingTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_ROAMING
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_ifmode_modemTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffboundaryTa5d6ff"Tb4b4b4:
Te6edf3if_mode Tff7b72= Te6edf3InterfaceTff7b72.Td2a8ffInterfaceTff7b72.Td2a8ffMODE_BOUNDARY
Tff7b72elseTb4b4b4:
Te6edf3if_mode Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffreticulumTff7b72.Td2a8ff_add_interfaceTb4b4b4(Te6edf3modeminterfaceTb4b4b4, Te6edf3mode Tff7b72= Te6edf3if_modeTb4b4b4, Te6edf3ifac_netname Tff7b72= Te6edf3ifac_netnameTb4b4b4, Te6edf3ifac_netkey Tff7b72= Te6edf3ifac_netkeyTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_modem Tff7b72= Te6edf3modeminterface
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while adding Modem Interface. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinterface_modem Tff7b72= Tff7b72None
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffReticulum started, activating LXMF...Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffinit.loadingstateTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffActivating LXMF RouterTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxm_limit_1mbTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3lxm_limit Tff7b72= T79c0ff1000
Tff7b72elseTb4b4b4:
Te6edf3lxm_limit Tff7b72= Tff7b72selfTff7b72.Td2a8ffdefault_lxm_limit
Tff7b72selfTff7b72.Td2a8ffmessage_router Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTb4b4b4(Te6edf3identity Tff7b72= Tff7b72selfTff7b72.Td2a8ffidentityTb4b4b4, Te6edf3storagepath Tff7b72= Tff7b72selfTff7b72.Td2a8fflxmf_storageTb4b4b4, Te6edf3autopeer Tff7b72= Tff7b72TrueTb4b4b4, Te6edf3delivery_limit Tff7b72= Te6edf3lxm_limitTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffregister_delivery_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8fflxmf_deliveryTb4b4b4)
Te6edf3configured_stamp_cost Tff7b72= Tff7b72None
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_require_stampsTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3configured_stamp_cost Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_inbound_stamp_costTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8fflxmf_destination Tff7b72= Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffregister_delivery_identityTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidentityTb4b4b4, Te6edf3display_nameTff7b72=Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdisplay_nameTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3stamp_costTff7b72=Te6edf3configured_stamp_costTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_ignore_invalid_stampsTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffenforce_stampsTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffignore_stampsTb4b4b4(Tb4b4b4)
T8b949e# TODO: Update to announce call in LXMF when full 0.5.0 support is added (get app data from LXMRouter instead)
T8b949e# Currently overrides the LXMF routers auto-generated announce data so that Sideband will announce old-format
T8b949e# LXMF announces if require_stamps is disabled.
T8b949e# if not self.config["lxmf_require_stamps"]:
T8b949e# self.lxmf_destination.set_default_app_data(self.get_display_name_bytes)
Tff7b72selfTff7b72.Td2a8ffrns_dir Tff7b72= Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffconfigdir
Tff7b72selfTff7b72.Td2a8ffupdate_active_lxmf_propagation_nodeTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffupdate_active_lxmf_propagation_nodeTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_propagation_nodeTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_propagation_nodeTa5d6ff"Tb4b4b4] Tff7b72!= Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffset_active_propagation_nodeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_propagation_nodeTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflast_lxmf_propagation_nodeTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflast_lxmf_propagation_nodeTa5d6ff"Tb4b4b4] Tff7b72!= Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffset_active_propagation_nodeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflast_lxmf_propagation_nodeTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffset_active_propagation_nodeTb4b4b4(Tff7b72NoneTb4b4b4)
Tff7b72def Td2a8ffupdate_ignore_invalid_stampsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_ignore_invalid_stampsTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffenforce_stampsTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffignore_stampsTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffmessage_notification_no_displayTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3messageTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage_notificationTb4b4b4(Te6edf3messageTb4b4b4, Te6edf3no_displayTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffmessage_notificationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3messageTb4b4b4, Te6edf3no_displayTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3messageTff7b72.Td2a8ffstate Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffFAILED Tff7b72and Tffa657hasattrTb4b4b4(Te6edf3messageTb4b4b4, Ta5d6ff"Ta5d6fftry_propagation_on_failTa5d6ff"Tb4b4b4) Tff7b72and Te6edf3messageTff7b72.Td2a8fftry_propagation_on_failTb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3messageTb4b4b4, Ta5d6ff"Ta5d6ffstamp_generation_failedTa5d6ff"Tb4b4b4) Tff7b72and Te6edf3messageTff7b72.Td2a8ffstamp_generation_failed Tff7b72== Tff7b72TrueTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCould not send Tffd700{Te6edf3messageTffd700}Ta5d6ff due to a stamp generation failureTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72if Tff7b72not Te6edf3no_displayTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflxm_ingestTb4b4b4(Te6edf3messageTb4b4b4, Te6edf3originatorTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDirect delivery of Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3messageTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff failed. Retrying as propagated message.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_VERBOSETb4b4b4)
Te6edf3messageTff7b72.Td2a8fftry_propagation_on_fail Tff7b72= Tff7b72None
Te6edf3messageTff7b72.Td2a8ffdelivery_attempts Tff7b72= T79c0ff0
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3messageTb4b4b4, Ta5d6ff"Ta5d6ffnext_delivery_attemptTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72del Te6edf3messageTff7b72.Td2a8ffnext_delivery_attempt
Te6edf3messageTff7b72.Td2a8ffpacked Tff7b72= Tff7b72None
Te6edf3messageTff7b72.Td2a8ffdesired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPROPAGATED
Tff7b72selfTff7b72.Td2a8ff_db_message_set_methodTb4b4b4(Te6edf3messageTff7b72.Td2a8ffhashTb4b4b4, Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPROPAGATEDTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffhandle_outboundTb4b4b4(Te6edf3messageTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72not Te6edf3no_displayTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflxm_ingestTb4b4b4(Te6edf3messageTb4b4b4, Te6edf3originatorTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72if Te6edf3messageTff7b72.Td2a8fffields Tff7b72!= Tff7b72None Tff7b72and Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRY Tff7b72in Te6edf3messageTff7b72.Td2a8fffieldsTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3messageTff7b72.Td2a8fffieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRYTb4b4b4]Tb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3telemeter Tff7b72= Te6edf3TelemeterTff7b72.Td2a8fffrom_packedTb4b4b4(Te6edf3messageTff7b72.Td2a8fffieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRYTb4b4b4]Tb4b4b4)
Te6edf3telemetry_timebase Tff7b72= Te6edf3telemeterTff7b72.Td2a8ffread_allTb4b4b4(Tb4b4b4)Tb4b4b4[Ta5d6ff"Ta5d6fftimeTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffutcTa5d6ff"Tb4b4b4]
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffSetting last successul telemetry timebase for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3messageTff7b72.Td2a8ffdestination_hashTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff to Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3telemetry_timebaseTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3messageTff7b72.Td2a8ffdestination_hashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.last_send_success_timebaseTa5d6ff"Tb4b4b4, Te6edf3telemetry_timebaseTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while setting last successul telemetry timebase for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3messageTff7b72.Td2a8ffdestination_hashTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72def Td2a8ffget_message_fieldsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3telemetry_updateTff7b72=Tff7b72FalseTb4b4b4, Te6edf3is_authorized_telemetry_requestTff7b72=Tff7b72FalseTb4b4b4, Te6edf3signal_already_sentTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3fields Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3send_telemetry Tff7b72= Tb4b4b4(Te6edf3telemetry_update Tff7b72== Tff7b72TrueTb4b4b4) Tff7b72or Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffshould_send_telemetryTb4b4b4(Te6edf3context_destTb4b4b4) Tff7b72or Te6edf3is_authorized_telemetry_requestTb4b4b4)
Te6edf3send_appearance Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_send_appearanceTa5d6ff"Tb4b4b4] Tff7b72or Te6edf3send_telemetry
Tff7b72if Te6edf3send_telemetry Tff7b72and Tff7b72selfTff7b72.Td2a8fflatest_packed_telemetry Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3telemeter Tff7b72= Te6edf3TelemeterTff7b72.Td2a8fffrom_packedTb4b4b4(Tff7b72selfTff7b72.Td2a8fflatest_packed_telemetryTb4b4b4)
Te6edf3telemetry_timebase Tff7b72= Te6edf3telemeterTff7b72.Td2a8ffread_allTb4b4b4(Tb4b4b4)Tb4b4b4[Ta5d6ff"Ta5d6fftimeTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffutcTa5d6ff"Tb4b4b4]
Te6edf3last_success_tb Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.last_send_success_timebaseTa5d6ff"Tb4b4b4) Tff7b72or T79c0ff0Tb4b4b4)
Tff7b72if Te6edf3telemetry_timebase Tff7b72> Te6edf3last_success_tbTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffEmbedding own telemetry in message since current telemetry is newer than latest successful timebaseTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNot embedding own telemetry in message since current telemetry timebase (Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3telemetry_timebaseTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff) is not newer than latest successful timebase (Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3last_success_tbTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff)Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3send_telemetry Tff7b72= Tff7b72False
Te6edf3send_appearance Tff7b72= Tff7b72False
Tff7b72if Te6edf3signal_already_sentTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNot embedding telemetry in message since no telemetry is availableTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3send_telemetry Tff7b72= Tff7b72False
Tff7b72if Te6edf3send_telemetry Tff7b72or Te6edf3send_appearanceTb4b4b4:
Tff7b72if Te6edf3send_appearanceTb4b4b4:
Tff7b72def Td2a8fffthTb4b4b4(Te6edf3cTb4b4b4)Tb4b4b4:
Te6edf3r Tff7b72= Te6edf3cTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4; Te6edf3g Tff7b72= Te6edf3cTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4; Te6edf3b Tff7b72= Te6edf3cTb4b4b4[T79c0ff2Tb4b4b4]
Te6edf3r Tff7b72= Tffa657minTb4b4b4(Tffa657maxTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3rTb4b4b4)Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4; Te6edf3g Tff7b72= Tffa657minTb4b4b4(Tffa657maxTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3gTb4b4b4)Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4; Te6edf3b Tff7b72= Tffa657minTb4b4b4(Tffa657maxTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3bTb4b4b4)Tb4b4b4, T79c0ff1Tb4b4b4)
Te6edf3d Tff7b72= T79c0ff1.0Tff7b72/T79c0ff255.0
Tff7b72return Te6edf3structTff7b72.Td2a8ffpackTb4b4b4(Ta5d6ff"Ta5d6ff!BBBTa5d6ff"Tb4b4b4, Tffa657intTb4b4b4(Te6edf3rTff7b72/Te6edf3dTb4b4b4)Tb4b4b4, Tffa657intTb4b4b4(Te6edf3gTff7b72/Te6edf3dTb4b4b4)Tb4b4b4, Tffa657intTb4b4b4(Te6edf3bTff7b72/Te6edf3dTb4b4b4)Tb4b4b4)
Te6edf3icon Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_iconTa5d6ff"Tb4b4b4]
Te6edf3fg Tff7b72= Te6edf3fthTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_fgTa5d6ff"Tb4b4b4]Tb4b4b4[Tb4b4b4:Tff7b72-T79c0ff1Tb4b4b4]Tb4b4b4)
Te6edf3bg Tff7b72= Te6edf3fthTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_bgTa5d6ff"Tb4b4b4]Tb4b4b4[Tb4b4b4:Tff7b72-T79c0ff1Tb4b4b4]Tb4b4b4)
Te6edf3fieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_ICON_APPEARANCETb4b4b4] Tff7b72= Tb4b4b4[Te6edf3iconTb4b4b4, Te6edf3fgTb4b4b4, Te6edf3bgTb4b4b4]
Tff7b72if Te6edf3send_telemetryTb4b4b4:
Te6edf3fieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRYTb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8fflatest_packed_telemetry
Tff7b72return Te6edf3fields
Tff7b72def Td2a8ffpaper_messageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3contentTb4b4b4, Te6edf3destination_hashTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3content Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMessage content cannot be emptyTa5d6ff"Tb4b4b4)
Te6edf3dest_identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Te6edf3destination_hashTb4b4b4)
Te6edf3dest Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTb4b4b4(Te6edf3dest_identityTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffOUTTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffSINGLETb4b4b4, Ta5d6ff"Ta5d6fflxmfTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdeliveryTa5d6ff"Tb4b4b4)
Te6edf3source Tff7b72= Tff7b72selfTff7b72.Td2a8fflxmf_destination
Te6edf3desired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPAPER
T8b949e# TODO: Should paper messages also include a ticket to trusted peers?
Te6edf3lxm Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTb4b4b4(Te6edf3destTb4b4b4, Te6edf3sourceTb4b4b4, Te6edf3contentTb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3desired_methodTff7b72=Te6edf3desired_methodTb4b4b4, Te6edf3fields Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_message_fieldsTb4b4b4(Te6edf3destination_hashTb4b4b4)Tb4b4b4, Te6edf3include_ticketTff7b72=Tff7b72selfTff7b72.Td2a8ffis_trustedTb4b4b4(Te6edf3destination_hashTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflxm_ingestTb4b4b4(Te6edf3lxmTb4b4b4, Te6edf3originatorTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72return Tff7b72True
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while creating paper message: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ff_service_get_lxm_progressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3lxm_hashTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffservice_rpc_requestTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffget_lxm_progressTa5d6ff"Tb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6fflxm_hashTa5d6ff"Tb4b4b4: Te6edf3lxm_hashTb4b4b4}Tb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while getting LXM progress over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffget_lxm_progressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3lxm_hashTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3prg Tff7b72= Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffget_outbound_progressTb4b4b4(Te6edf3lxm_hashTb4b4b4)
Tff7b72if Tff7b72not Te6edf3prg Tff7b72and Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Te6edf3prg Tff7b72= Tff7b72selfTff7b72.Td2a8ff_service_get_lxm_progressTb4b4b4(Te6edf3lxm_hashTb4b4b4)
Tff7b72return Te6edf3prg
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while getting message transfer progress: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72None
Tff7b72def Td2a8ff_service_get_lxm_stamp_costTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3lxm_hashTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffservice_rpc_requestTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffget_lxm_stamp_costTa5d6ff"Tb4b4b4: Tb4b4b4{ Ta5d6ff"Ta5d6fflxm_hashTa5d6ff"Tb4b4b4: Te6edf3lxm_hash Tb4b4b4} Tb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while sending message over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffget_lxm_stamp_costTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3lxm_hashTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffallow_service_dispatch Tff7b72and Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_service_get_lxm_stamp_costTb4b4b4(Te6edf3lxm_hashTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while getting message transfer stamp cost: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffget_outbound_lxm_stamp_costTb4b4b4(Te6edf3lxm_hashTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while getting message transfer stamp cost: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72None
Tff7b72def Td2a8ff_service_cancel_messageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3message_idTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffservice_rpc_requestTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffcancel_messageTa5d6ff"Tb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6ffmessage_idTa5d6ff"Tb4b4b4: Te6edf3message_id Tb4b4b4}Tb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while cancelling message over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72def Td2a8ff_service_send_messageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3contentTb4b4b4, Te6edf3destination_hashTb4b4b4, Te6edf3propagationTb4b4b4, Te6edf3skip_fieldsTff7b72=Tff7b72FalseTb4b4b4, Te6edf3no_displayTff7b72=Tff7b72FalseTb4b4b4, Te6edf3attachment Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3image Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3audio Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffservice_rpc_requestTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffsend_messageTa5d6ff"Tb4b4b4: Tb4b4b4{
Ta5d6ff"Ta5d6ffcontentTa5d6ff"Tb4b4b4: Te6edf3contentTb4b4b4,
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3destination_hashTb4b4b4,
Ta5d6ff"Ta5d6ffpropagationTa5d6ff"Tb4b4b4: Te6edf3propagationTb4b4b4,
Ta5d6ff"Ta5d6ffskip_fieldsTa5d6ff"Tb4b4b4: Te6edf3skip_fieldsTb4b4b4,
Ta5d6ff"Ta5d6ffno_displayTa5d6ff"Tb4b4b4: Te6edf3no_displayTb4b4b4,
Ta5d6ff"Ta5d6ffattachmentTa5d6ff"Tb4b4b4: Te6edf3attachmentTb4b4b4,
Ta5d6ff"Ta5d6ffimageTa5d6ff"Tb4b4b4: Te6edf3imageTb4b4b4,
Ta5d6ff"Ta5d6ffaudioTa5d6ff"Tb4b4b4: Te6edf3audioTb4b4b4}
Tb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while sending message over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72def Td2a8ff_service_send_commandTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3contentTb4b4b4, Te6edf3destination_hashTb4b4b4, Te6edf3propagationTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffservice_rpc_requestTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffsend_commandTa5d6ff"Tb4b4b4: Tb4b4b4{
Ta5d6ff"Ta5d6ffcontentTa5d6ff"Tb4b4b4: Te6edf3contentTb4b4b4,
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3destination_hashTb4b4b4,
Ta5d6ff"Ta5d6ffpropagationTa5d6ff"Tb4b4b4: Te6edf3propagationTb4b4b4}
Tb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while sending command over RPC: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffcancel_messageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3message_idTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffallow_service_dispatch Tff7b72and Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_service_cancel_messageTb4b4b4(Te6edf3message_idTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while cancelling message: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffcancel_outboundTb4b4b4(Te6edf3message_idTb4b4b4)
Tff7b72return Tff7b72True
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while cancelling message: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffsend_messageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3contentTb4b4b4, Te6edf3destination_hashTb4b4b4, Te6edf3propagationTb4b4b4, Te6edf3skip_fieldsTff7b72=Tff7b72FalseTb4b4b4, Te6edf3no_displayTff7b72=Tff7b72FalseTb4b4b4, Te6edf3attachment Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3image Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3audio Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffallow_service_dispatch Tff7b72and Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_service_send_messageTb4b4b4(Te6edf3contentTb4b4b4, Te6edf3destination_hashTb4b4b4, Te6edf3propagationTb4b4b4, Te6edf3skip_fieldsTb4b4b4, Te6edf3no_displayTb4b4b4, Te6edf3attachmentTb4b4b4, Te6edf3imageTb4b4b4, Te6edf3audioTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while sending message: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3content Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMessage content cannot be emptyTa5d6ff"Tb4b4b4)
Te6edf3dest_identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Te6edf3destination_hashTb4b4b4)
Te6edf3dest Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTb4b4b4(Te6edf3dest_identityTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffOUTTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffSINGLETb4b4b4, Ta5d6ff"Ta5d6fflxmfTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdeliveryTa5d6ff"Tb4b4b4)
Te6edf3source Tff7b72= Tff7b72selfTff7b72.Td2a8fflxmf_destination
Tff7b72if Te6edf3propagationTb4b4b4:
Te6edf3desired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPROPAGATED
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffdelivery_link_availableTb4b4b4(Te6edf3destination_hashTb4b4b4) Tff7b72and Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffcurrent_ratchet_idTb4b4b4(Te6edf3destination_hashTb4b4b4) Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffHave ratchet for Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3destination_hashTb4b4b4)Tffd700}Ta5d6ff, requesting opportunistic delivery of messageTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3desired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffOPPORTUNISTIC
Tff7b72elseTb4b4b4:
Te6edf3desired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffDIRECT
Tff7b72if Te6edf3skip_fieldsTb4b4b4:
Te6edf3fields Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72elseTb4b4b4:
Te6edf3fields Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_message_fieldsTb4b4b4(Te6edf3destination_hashTb4b4b4)
Tff7b72if Te6edf3attachment Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3fieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_FILE_ATTACHMENTSTb4b4b4] Tff7b72= Tb4b4b4[Te6edf3attachmentTb4b4b4]
Tff7b72if Te6edf3image Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3fieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_IMAGETb4b4b4] Tff7b72= Te6edf3image
Tff7b72if Te6edf3audio Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3fieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_AUDIOTb4b4b4] Tff7b72= Te6edf3audio
Te6edf3md_sig Tff7b72= Ta5d6ff"Ta5d6ff#!mdTffea00\nTa5d6ff"
Tff7b72if Te6edf3contentTff7b72.Td2a8ffstartswithTb4b4b4(Te6edf3md_sigTb4b4b4)Tb4b4b4:
Te6edf3content Tff7b72= Te6edf3contentTb4b4b4[Tffa657lenTb4b4b4(Te6edf3md_sigTb4b4b4)Tb4b4b4:Tb4b4b4]
Te6edf3fieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_RENDERERTb4b4b4] Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffRENDERER_MARKDOWN
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffcompose_in_markdownTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3fieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_RENDERERTb4b4b4] Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffRENDERER_MARKDOWN
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffhas_bb_markupTb4b4b4(Te6edf3contentTb4b4b4)Tb4b4b4:
Te6edf3fieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_RENDERERTb4b4b4] Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffRENDERER_BBCODE
Te6edf3lxm Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTb4b4b4(Te6edf3destTb4b4b4, Te6edf3sourceTb4b4b4, Te6edf3contentTb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3desired_methodTff7b72=Te6edf3desired_methodTb4b4b4, Te6edf3fields Tff7b72= Te6edf3fieldsTb4b4b4, Te6edf3include_ticketTff7b72=Tff7b72selfTff7b72.Td2a8ffis_trustedTb4b4b4(Te6edf3destination_hashTb4b4b4)Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3no_displayTb4b4b4:
Te6edf3lxmTff7b72.Td2a8ffregister_delivery_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmessage_notificationTb4b4b4)
Te6edf3lxmTff7b72.Td2a8ffregister_failed_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmessage_notificationTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3lxmTff7b72.Td2a8ffregister_delivery_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmessage_notification_no_displayTb4b4b4)
Te6edf3lxmTff7b72.Td2a8ffregister_failed_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmessage_notification_no_displayTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffget_outbound_propagation_nodeTb4b4b4(Tb4b4b4) Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_try_propagation_on_failTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3lxmTff7b72.Td2a8fftry_propagation_on_fail Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffhandle_outboundTb4b4b4(Te6edf3lxmTb4b4b4)
Tff7b72if Tff7b72not Te6edf3no_displayTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflxm_ingestTb4b4b4(Te6edf3lxmTb4b4b4, Te6edf3originatorTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72return Tff7b72True
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while sending message: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffsend_commandTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3contentTb4b4b4, Te6edf3destination_hashTb4b4b4, Te6edf3propagationTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffallow_service_dispatch Tff7b72and Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_service_send_commandTb4b4b4(Te6edf3contentTb4b4b4, Te6edf3destination_hashTb4b4b4, Te6edf3propagationTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while sending message: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3content Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72return Tff7b72False
Te6edf3commands Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72if Te6edf3contentTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffecho Ta5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3echo_content Tff7b72= Te6edf3contentTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ffecho Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3echo_contentTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3commandsTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4{Te6edf3CommandsTff7b72.Td2a8ffECHOTb4b4b4: Te6edf3echo_contentTb4b4b4}Tb4b4b4)
Tff7b72elif Te6edf3contentTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffsigTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3commandsTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4{Te6edf3CommandsTff7b72.Td2a8ffSIGNAL_REPORTTb4b4b4: Tff7b72TrueTb4b4b4}Tb4b4b4)
Tff7b72elif Te6edf3contentTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffpingTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3commandsTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4{Te6edf3CommandsTff7b72.Td2a8ffPINGTb4b4b4: Tff7b72TrueTb4b4b4}Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3commandsTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4{Te6edf3CommandsTff7b72.Td2a8ffPLUGIN_COMMANDTb4b4b4: Te6edf3contentTb4b4b4}Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3commandsTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72return Tff7b72False
Te6edf3dest_identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Te6edf3destination_hashTb4b4b4)
Te6edf3dest Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTb4b4b4(Te6edf3dest_identityTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffOUTTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffSINGLETb4b4b4, Ta5d6ff"Ta5d6fflxmfTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdeliveryTa5d6ff"Tb4b4b4)
Te6edf3source Tff7b72= Tff7b72selfTff7b72.Td2a8fflxmf_destination
Tff7b72if Te6edf3propagationTb4b4b4:
Te6edf3desired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffPROPAGATED
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffdelivery_link_availableTb4b4b4(Te6edf3destination_hashTb4b4b4) Tff7b72and Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffcurrent_ratchet_idTb4b4b4(Te6edf3destination_hashTb4b4b4) Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffHave ratchet for Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3destination_hashTb4b4b4)Tffd700}Ta5d6ff, requesting opportunistic delivery of commandTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3desired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffOPPORTUNISTIC
Tff7b72elseTb4b4b4:
Te6edf3desired_method Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffDIRECT
Te6edf3lxm Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMessageTb4b4b4(Te6edf3destTb4b4b4, Te6edf3sourceTb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3desired_methodTff7b72=Te6edf3desired_methodTb4b4b4, Te6edf3fields Tff7b72= Tb4b4b4{Te6edf3LXMFTff7b72.Td2a8ffFIELD_COMMANDSTb4b4b4: Te6edf3commandsTb4b4b4}Tb4b4b4, Te6edf3include_ticketTff7b72=Tff7b72selfTff7b72.Td2a8ffis_trustedTb4b4b4(Te6edf3destination_hashTb4b4b4)Tb4b4b4)
Te6edf3lxmTff7b72.Td2a8ffregister_delivery_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmessage_notificationTb4b4b4)
Te6edf3lxmTff7b72.Td2a8ffregister_failed_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmessage_notificationTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffget_outbound_propagation_nodeTb4b4b4(Tb4b4b4) Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_try_propagation_on_failTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3lxmTff7b72.Td2a8fftry_propagation_on_fail Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffhandle_outboundTb4b4b4(Te6edf3lxmTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflxm_ingestTb4b4b4(Te6edf3lxmTb4b4b4, Te6edf3originatorTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72return Tff7b72True
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while sending message: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffnew_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dest_strTb4b4b4, Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3trusted Tff7b72= Tff7b72FalseTb4b4b4, Te6edf3voice_only Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3dest_strTb4b4b4) Tff7b72!= Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffTRUNCATED_HASHLENGTHTff7b72/Tff7b72/T79c0ff8Tff7b72*T79c0ff2Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72tryTb4b4b4:
Te6edf3addr_b Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3dest_strTb4b4b4)
Tff7b72if Te6edf3addr_b Tff7b72== Tff7b72selfTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhashTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCannot create conversation with own LXMF addressTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72not Te6edf3voice_onlyTb4b4b4: Tff7b72selfTff7b72.Td2a8ff_db_create_conversationTb4b4b4(Te6edf3addr_bTb4b4b4, Te6edf3nameTb4b4b4, Te6edf3trustedTb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72selfTff7b72.Td2a8ff_db_create_voice_objectTb4b4b4(Te6edf3addr_bTb4b4b4, Te6edf3nameTb4b4b4, Te6edf3trustedTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while creating conversation: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72return Tff7b72True
Tff7b72def Td2a8ffcreate_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3name Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3trusted Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_create_conversationTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3nameTb4b4b4, Te6edf3trustedTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while creating conversation: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72return Tff7b72True
Tff7b72def Td2a8fflxm_ingest_uriTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3uriTb4b4b4)Tb4b4b4:
Te6edf3local_delivery_signal Tff7b72= Ta5d6ff"Ta5d6fflocal_delivery_occurredTa5d6ff"
Te6edf3duplicate_signal Tff7b72= Ta5d6ff"Ta5d6ffduplicate_lxmTa5d6ff"
Te6edf3ingest_result Tff7b72= Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffingest_lxm_uriTb4b4b4(
Te6edf3uriTb4b4b4,
Te6edf3signal_local_deliveryTff7b72=Te6edf3local_delivery_signalTb4b4b4,
Te6edf3signal_duplicateTff7b72=Te6edf3duplicate_signal
Tb4b4b4)
Tff7b72if Te6edf3ingest_result Tff7b72== Tff7b72FalseTb4b4b4:
Te6edf3response Tff7b72= Ta5d6ff"Ta5d6ffThe URI contained no decodable messagesTa5d6ff"
Tff7b72elif Te6edf3ingest_result Tff7b72== Te6edf3local_delivery_signalTb4b4b4:
Te6edf3response Tff7b72= Ta5d6ff"Ta5d6ffMessage was decoded, decrypted successfully, and added to your conversation list.Ta5d6ff"
Tff7b72elif Te6edf3ingest_result Tff7b72== Te6edf3duplicate_signalTb4b4b4:
Te6edf3response Tff7b72= Ta5d6ff"Ta5d6ffThe decoded message has already been processed by the LXMF Router, and will not be ingested again.Ta5d6ff"
Tff7b72elseTb4b4b4:
T8b949e# TODO: Add message to sneakernet queues
Te6edf3response Tff7b72= Ta5d6ff"Ta5d6ffThe decoded message was not addressed to your LXMF address, and has been discarded.Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6fflxm_uri_ingest.resultTa5d6ff"Tb4b4b4, Te6edf3responseTb4b4b4)
Tff7b72def Td2a8ffstrip_bb_markupTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3textTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tffa657hasattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6ffsmrTa5d6ff"Tb4b4b4) Tff7b72or Tff7b72selfTff7b72.Td2a8ffsmr Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsmr Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff\Ta5d6ff[Ta5d6ff\Ta5d6ff/?(?:b|i|u|url|quote|code|img|color|size)*?.*?Ta5d6ff\Ta5d6ff]Ta5d6ff"Tb4b4b4,Te6edf3reTff7b72.Td2a8ffIGNORECASE Tff7b72| Te6edf3reTff7b72.Td2a8ffMULTILINE Tb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ffsmrTff7b72.Td2a8ffsubTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3textTb4b4b4)
Tff7b72def Td2a8ffhas_bb_markupTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3textTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tffa657hasattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6ffsmrTa5d6ff"Tb4b4b4) Tff7b72or Tff7b72selfTff7b72.Td2a8ffsmr Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsmr Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff\Ta5d6ff[Ta5d6ff\Ta5d6ff/?(?:b|i|u|url|quote|code|img|color|size)*?.*?Ta5d6ff\Ta5d6ff]Ta5d6ff"Tb4b4b4,Te6edf3reTff7b72.Td2a8ffIGNORECASE Tff7b72| Te6edf3reTff7b72.Td2a8ffMULTILINE Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsmrTff7b72.Td2a8ffmatchTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72def Td2a8fflxm_ingestTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3messageTb4b4b4, Te6edf3originator Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3should_notify Tff7b72= Tff7b72False
Te6edf3is_trusted Tff7b72= Tff7b72False
Te6edf3ptt_enabled Tff7b72= Tff7b72False
Te6edf3telemetry_only Tff7b72= Tff7b72False
Te6edf3own_command Tff7b72= Tff7b72False
Te6edf3unread_reason_tx Tff7b72= Tff7b72False
Tff7b72if Te6edf3originatorTb4b4b4:
Te6edf3context_dest Tff7b72= Te6edf3messageTff7b72.Td2a8ffdestination_hash
Te6edf3unread_reason_tx Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Te6edf3context_dest Tff7b72= Te6edf3messageTff7b72.Td2a8ffsource_hash
Te6edf3is_trusted Tff7b72= Tff7b72selfTff7b72.Td2a8ffis_trustedTb4b4b4(Te6edf3context_destTb4b4b4)
Te6edf3ptt_enabled Tff7b72= Tff7b72selfTff7b72.Td2a8ffptt_enabledTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72if Te6edf3originator Tff7b72and Te6edf3LXMFTff7b72.Td2a8ffFIELD_COMMANDS Tff7b72in Te6edf3messageTff7b72.Td2a8fffieldsTb4b4b4:
Te6edf3own_command Tff7b72= Tff7b72True
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_db_messageTb4b4b4(Te6edf3messageTff7b72.Td2a8ffhashTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffMessage exists, setting state to: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3messageTff7b72.Td2a8ffstateTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3stamp Tff7b72= Tff7b72None
Tff7b72if Te6edf3originator Tff7b72and Te6edf3messageTff7b72.Td2a8ffstamp Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3stamp Tff7b72= Tb4b4b4[Te6edf3messageTff7b72.Td2a8ffstampTb4b4b4, Te6edf3messageTff7b72.Td2a8ffstamp_validTb4b4b4, Te6edf3messageTff7b72.Td2a8ffstamp_valueTb4b4b4]
Tff7b72selfTff7b72.Td2a8ff_db_message_set_stateTb4b4b4(Te6edf3messageTff7b72.Td2a8ffhashTb4b4b4, Te6edf3messageTff7b72.Td2a8ffstateTb4b4b4, Te6edf3ratchet_idTff7b72=Te6edf3messageTff7b72.Td2a8ffratchet_idTb4b4b4, Te6edf3originator_stampTff7b72=Te6edf3stampTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffMessage does not exist, savingTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_save_lxmTb4b4b4(Te6edf3messageTb4b4b4, Te6edf3context_destTb4b4b4, Te6edf3originatorTb4b4b4, Te6edf3own_commandTff7b72=Te6edf3own_commandTb4b4b4)
Tff7b72if Te6edf3is_trustedTb4b4b4:
Te6edf3should_notify Tff7b72= Tff7b72True
Tff7b72if Tffa657lenTb4b4b4(Te6edf3messageTff7b72.Td2a8ffcontentTb4b4b4) Tff7b72== T79c0ff0 Tff7b72and Tffa657lenTb4b4b4(Te6edf3messageTff7b72.Td2a8fftitleTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72if Tb4b4b4(Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRY Tff7b72in Te6edf3messageTff7b72.Td2a8fffields Tff7b72or Te6edf3LXMFTff7b72.Td2a8ffFIELD_TELEMETRY_STREAM Tff7b72in Te6edf3messageTff7b72.Td2a8fffields Tff7b72or Te6edf3LXMFTff7b72.Td2a8ffFIELD_COMMANDS Tff7b72in Te6edf3messageTff7b72.Td2a8fffieldsTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffSquelching notification due to telemetry-only messageTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3telemetry_only Tff7b72= Tff7b72True
Tff7b72if Te6edf3LXMFTff7b72.Td2a8ffFIELD_TICKET Tff7b72in Te6edf3messageTff7b72.Td2a8fffieldsTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_serviceTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNotifying UI of newly arrived delivery ticketTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.new_ticketTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72if Tff7b72not Te6edf3telemetry_onlyTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4) Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_create_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.new_conversationsTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgui_displayTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffmessages_screenTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgui_conversationTb4b4b4(Tb4b4b4) Tff7b72!= Te6edf3context_destTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffunread_conversationTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3txTff7b72=Te6edf3unread_reason_txTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.unread_conversationsTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftxtime_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.viewupdate.conversationsTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgui_foregroundTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffSquelching notification since GUI is in foregroundTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3should_notify Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffunread_conversationTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3txTff7b72=Te6edf3unread_reason_txTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.unread_conversationsTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgui_displayTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffconversations_screenTa5d6ff" Tff7b72and Tff7b72selfTff7b72.Td2a8ffgui_foregroundTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3should_notify Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Te6edf3originator Tff7b72and Te6edf3LXMFTff7b72.Td2a8ffFIELD_AUDIO Tff7b72in Te6edf3messageTff7b72.Td2a8fffields Tff7b72and Te6edf3ptt_enabledTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffptt_eventTb4b4b4(Te6edf3messageTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgui_conversationTb4b4b4(Tb4b4b4) Tff7b72!= Te6edf3context_destTb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3should_notify Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Te6edf3should_notify Tff7b72= Tff7b72False
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_clientTb4b4b4:
Te6edf3should_notify Tff7b72= Tff7b72False
Tff7b72if Te6edf3telemetry_onlyTb4b4b4:
Te6edf3should_notify Tff7b72= Tff7b72False
Tff7b72if Te6edf3should_notifyTb4b4b4:
Te6edf3nlen Tff7b72= T79c0ff128
Te6edf3text Tff7b72= Te6edf3messageTff7b72.Td2a8ffcontentTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3notification_content Tff7b72= Tff7b72selfTff7b72.Td2a8ffstrip_bb_markupTb4b4b4(Te6edf3textTb4b4b4[Tb4b4b4:Te6edf3nlenTb4b4b4]Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3textTb4b4b4) Tff7b72> Te6edf3nlenTb4b4b4:
Te6edf3notification_content Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff [...]Ta5d6ff"
Tff7b72if Tffa657lenTb4b4b4(Te6edf3textTb4b4b4) Tff7b72< T79c0ff2 Tff7b72and Te6edf3LXMFTff7b72.Td2a8ffFIELD_AUDIO Tff7b72in Te6edf3messageTff7b72.Td2a8fffieldsTb4b4b4:
Te6edf3notification_content Tff7b72= Ta5d6ff"Ta5d6ffAudio messageTa5d6ff"
Tff7b72if Tffa657lenTb4b4b4(Te6edf3textTb4b4b4) Tff7b72< T79c0ff2 Tff7b72and Te6edf3LXMFTff7b72.Td2a8ffFIELD_IMAGE Tff7b72in Te6edf3messageTff7b72.Td2a8fffieldsTb4b4b4:
Te6edf3notification_content Tff7b72= Ta5d6ff"Ta5d6ffImageTa5d6ff"
Tff7b72if Tffa657lenTb4b4b4(Te6edf3textTb4b4b4) Tff7b72< T79c0ff2 Tff7b72and Te6edf3LXMFTff7b72.Td2a8ffFIELD_FILE_ATTACHMENTS Tff7b72in Te6edf3messageTff7b72.Td2a8fffieldsTb4b4b4:
Te6edf3notification_content Tff7b72= Ta5d6ff"Ta5d6ffFile attachmentTa5d6ff"
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffnotifyTb4b4b4(Te6edf3titleTff7b72=Tff7b72selfTff7b72.Td2a8ffpeer_display_nameTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4, Te6edf3contentTff7b72=Te6edf3notification_contentTb4b4b4, Te6edf3groupTff7b72=Ta5d6ff"Ta5d6ffLXMTa5d6ff"Tb4b4b4, Te6edf3context_idTff7b72=Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3context_destTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not post notification for received message: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72def Td2a8ffptt_playbackTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3messageTb4b4b4)Tb4b4b4:
Te6edf3ptt_timeout Tff7b72= T79c0ff60
Te6edf3event_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72while Tffa657hasattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6ffmsg_soundTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffmsg_sound Tff7b72!= Tff7b72None Tff7b72and Tff7b72selfTff7b72.Td2a8ffmsg_soundTff7b72.Td2a8ffplayingTb4b4b4(Tb4b4b4) Tff7b72and Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72< Te6edf3event_timeTff7b72+Te6edf3ptt_timeoutTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.1Tb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.5Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmsg_audio Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72from T7ee787plyer Tff7b72import Te6edf3audio
Tff7b72elseTb4b4b4:
Tff7b72from T7ee787sbappT7ee787.T7ee787plyer Tff7b72import Te6edf3audio
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAudio init doneTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmsg_audio Tff7b72= Te6edf3audio
Tff7b72tryTb4b4b4:
Te6edf3temp_path Tff7b72= Tff7b72None
Te6edf3audio_field Tff7b72= Te6edf3messageTff7b72.Td2a8fffieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_AUDIOTb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8fflast_msg_audio Tff7b72!= Te6edf3audio_fieldTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffReloading audio sourceTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3audio_fieldTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4) Tff7b72> T79c0ff10Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fflast_msg_audio Tff7b72= Te6edf3audio_fieldTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflast_msg_audio Tff7b72= Tff7b72None
Tff7b72return
Tff7b72if Te6edf3audio_fieldTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffAM_OPUS_OGGTb4b4b4:
Te6edf3temp_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffrec_cacheTff7b72+Ta5d6ff"Ta5d6ff/msg.oggTa5d6ff"
Tff7b72with Tffa657openTb4b4b4(Te6edf3temp_pathTb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3afTb4b4b4:
Te6edf3afTff7b72.Td2a8ffwriteTb4b4b4(Tff7b72selfTff7b72.Td2a8fflast_msg_audioTb4b4b4)
Tff7b72elif Te6edf3audio_fieldTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72>Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffAM_CODEC2_700C Tff7b72and Te6edf3audio_fieldTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72<Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffAM_CODEC2_3200Tb4b4b4:
Te6edf3temp_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffrec_cacheTff7b72+Ta5d6ff"Ta5d6ff/msg.oggTa5d6ff"
Tff7b72from T7ee787sidebandT7ee787.T7ee787audioproc Tff7b72import Te6edf3samples_to_oggTb4b4b4, Te6edf3decode_codec2Tb4b4b4, Te6edf3detect_codec2
Te6edf3target_rate Tff7b72= T79c0ff8000
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_linuxTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3target_rate Tff7b72= T79c0ff48000
Tff7b72if Te6edf3detect_codec2Tb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3samples_to_oggTb4b4b4(Te6edf3decode_codec2Tb4b4b4(Te6edf3audio_fieldTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4, Te6edf3audio_fieldTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3temp_pathTb4b4b4, Te6edf3input_rateTff7b72=T79c0ff8000Tb4b4b4, Te6edf3output_rateTff7b72=Te6edf3target_rateTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffWrote OGG file to: Ta5d6ff"Tff7b72+Te6edf3temp_pathTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffOGG write failedTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflast_msg_audio Tff7b72= Tff7b72None
Tff7b72return
Tff7b72elseTb4b4b4:
T8b949e# Unimplemented audio type
Tff7b72pass
Tff7b72selfTff7b72.Td2a8ffmsg_sound Tff7b72= Tff7b72selfTff7b72.Td2a8ffmsg_audio
Tff7b72selfTff7b72.Td2a8ffmsg_soundTff7b72.Td2a8ff_file_path Tff7b72= Te6edf3temp_path
Tff7b72selfTff7b72.Td2a8ffmsg_soundTff7b72.Td2a8ffreloadTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmsg_sound Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffStarting playbackTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmsg_soundTff7b72.Td2a8ffplayTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffPlayback was requested, but no audio data was loaded for playbackTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while playing message audio:Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72def Td2a8ffptt_eventTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3messageTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffptt_jobTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffptt_playback_lockTff7b72.Td2a8ffacquireTb4b4b4(Tb4b4b4)
Tff7b72while Tff7b72selfTff7b72.Td2a8ffui_recordingTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.5Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffptt_playbackTb4b4b4(Te6edf3messageTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while starting playback for PTT-enabled conversation: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72finallyTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffptt_playback_lockTff7b72.Td2a8ffreleaseTb4b4b4(Tb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3ptt_jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffui_started_recordingTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffui_recording Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffservice_rpc_set_ui_recordingTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffui_stopped_recordingTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffui_recording Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffservice_rpc_set_ui_recordingTb4b4b4(Tff7b72FalseTb4b4b4)
Tff7b72def Td2a8ffstartTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_db_clean_messagesTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_db_clean_telemetryTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__start_jobs_immediateTb4b4b4(Tb4b4b4)
Te6edf3thread Tff7b72= Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Tff7b72selfTff7b72.Td2a8ff__start_jobs_deferredTb4b4b4)
Te6edf3threadTff7b72.Td2a8ffsetDaemonTb4b4b4(Tff7b72TrueTb4b4b4)
Te6edf3threadTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffcore.startedTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffSideband Core Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffversion_strTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ffstartedTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffstop_webshareTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffwebshare_server Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwebshare_serverTff7b72.Td2a8ffshutdownTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwebshare_server Tff7b72= Tff7b72None
Tff7b72def Td2a8ffstart_webshareTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffwebshare_server Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72def Td2a8ffwebshare_jobTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72from T7ee787http Tff7b72import Te6edf3server
Tff7b72import T7ee787socketserver
Tff7b72import T7ee787json
Tff7b72import T7ee787ssl
Te6edf3webshare_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffwebshare_dir
Te6edf3port Tff7b72= T79c0ff4444
Tff7b72class T56d364RequestHandlerTb4b4b4(Te6edf3serverTff7b72.Td2a8ffSimpleHTTPRequestHandlerTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffdo_GETTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3serve_root Tff7b72= Te6edf3webshare_dir
Tff7b72if Ta5d6ff"Ta5d6ff?Ta5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffpathTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpath Tff7b72= Tff7b72selfTff7b72.Td2a8ffpathTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff?Ta5d6ff"Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3path Tff7b72= Te6edf3serve_root Tff7b72+ Tff7b72selfTff7b72.Td2a8ffpath
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpath Tff7b72== Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4:
Te6edf3path Tff7b72= Te6edf3serve_root Tff7b72+ Ta5d6ff"Ta5d6ff/index.htmlTa5d6ff"
Tff7b72if Ta5d6ff"Ta5d6ff/..Ta5d6ff" Tff7b72in Tff7b72selfTff7b72.Td2a8ffpathTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsend_responseTb4b4b4(T79c0ff403Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffend_headersTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6ff"Ta5d6ffForbiddenTa5d6ff"Tff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffpath Tff7b72== Ta5d6ff"Ta5d6ff/pkglistTa5d6ff"Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsend_responseTb4b4b4(T79c0ff200Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsend_headerTb4b4b4(Ta5d6ff"Ta5d6ffContent-typeTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fftext/jsonTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffend_headersTb4b4b4(Tb4b4b4)
Te6edf3json_result Tff7b72= Te6edf3jsonTff7b72.Td2a8ffdumpsTb4b4b4(Tffa657sortedTb4b4b4(Te6edf3osTff7b72.Td2a8fflistdirTb4b4b4(Te6edf3serve_rootTff7b72+Ta5d6ff"Ta5d6ff/pkgTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwfileTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3json_resultTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsend_responseTb4b4b4(T79c0ff500Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffend_headersTb4b4b4(Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError listing directory Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3pathTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3es Tff7b72= Ta5d6ff"Ta5d6ffErrorTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffwfileTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3esTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(Te6edf3pathTb4b4b4, Ta5d6ff'Ta5d6ffrbTa5d6ff'Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3data Tff7b72= Te6edf3fTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsend_responseTb4b4b4(T79c0ff200Tb4b4b4)
Tff7b72if Te6edf3pathTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6ff.apkTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsend_headerTb4b4b4(Ta5d6ff"Ta5d6ffContent-typeTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffapplication/vnd.android.package-archiveTa5d6ff"Tb4b4b4)
Tff7b72elif Te6edf3pathTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6ff.jsTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsend_headerTb4b4b4(Ta5d6ff"Ta5d6ffContent-typeTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fftext/javascriptTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffend_headersTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwfileTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3dataTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsend_responseTb4b4b4(T79c0ff500Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffend_headersTb4b4b4(Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError serving file Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3pathTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3es Tff7b72= Ta5d6ff"Ta5d6ffErrorTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffwfileTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3esTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)
T8b949e#######################################################
T8b949e# Override BaseHTTPRequestHandler method to squelch
T8b949e# excessive exception logging when client signals
T8b949e# invalid certificate to the server. This will always
T8b949e# happen from some clients when using a self-signed
T8b949e# certificate, so we don't care.
Tff7b72if Tff7b72not Tffa657hasattrTb4b4b4(Te6edf3serverTff7b72.Td2a8ffBaseHTTPRequestHandlerTb4b4b4, Ta5d6ff"Ta5d6ffhandle_origTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3serverTff7b72.Td2a8ffBaseHTTPRequestHandlerTff7b72.Td2a8ffhandle_orig Tff7b72= Te6edf3serverTff7b72.Td2a8ffBaseHTTPRequestHandlerTff7b72.Td2a8ffhandle
Tff7b72def Td2a8ffhandleTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhandle_origTb4b4b4(Tb4b4b4)
Tff7b72except Te6edf3sslTff7b72.Td2a8ffSSLErrorTb4b4b4:
Tff7b72pass
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffHTTP server exception: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3serverTff7b72.Td2a8ffBaseHTTPRequestHandlerTff7b72.Td2a8ffhandle Tff7b72= Te6edf3handle
T8b949e#######################################################
Te6edf3socketserverTff7b72.Td2a8ffTCPServerTff7b72.Td2a8ffallow_reuse_address Tff7b72= Tff7b72True
Tff7b72class T56d364ThreadedHTTPServerTb4b4b4(Te6edf3socketserverTff7b72.Td2a8ffThreadingMixInTb4b4b4, Te6edf3serverTff7b72.Td2a8ffHTTPServerTb4b4b4)Tb4b4b4:
Te6edf3daemon_threads Tff7b72= Tff7b72True
Tff7b72with Te6edf3ThreadedHTTPServerTb4b4b4(Tb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3portTb4b4b4)Tb4b4b4, Te6edf3RequestHandlerTb4b4b4) Tff7b72as Te6edf3webserverTb4b4b4:
Tff7b72from T7ee787sidebandT7ee787.T7ee787certgen Tff7b72import Te6edf3ensure_certificate
Te6edf3ensure_certificateTb4b4b4(Tff7b72selfTff7b72.Td2a8ffwebshare_ssl_key_pathTb4b4b4, Tff7b72selfTff7b72.Td2a8ffwebshare_ssl_cert_pathTb4b4b4)
Te6edf3ssl_context Tff7b72= Te6edf3sslTff7b72.Td2a8ffSSLContextTb4b4b4(Te6edf3sslTff7b72.Td2a8ffPROTOCOL_TLS_SERVERTb4b4b4)
Te6edf3ssl_contextTff7b72.Td2a8ffload_cert_chainTb4b4b4(Te6edf3certfileTff7b72=Tff7b72selfTff7b72.Td2a8ffwebshare_ssl_cert_pathTb4b4b4, Te6edf3keyfileTff7b72=Tff7b72selfTff7b72.Td2a8ffwebshare_ssl_key_pathTb4b4b4)
Te6edf3webserverTff7b72.Td2a8ffsocket Tff7b72= Te6edf3ssl_contextTff7b72.Td2a8ffwrap_socketTb4b4b4(Te6edf3webserverTff7b72.Td2a8ffsocketTb4b4b4, Te6edf3do_handshake_on_connectTff7b72=Tff7b72FalseTb4b4b4, Te6edf3server_sideTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwebshare_server Tff7b72= Te6edf3webserver
Te6edf3webserverTff7b72.Td2a8ffserve_foreverTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwebshare_server Tff7b72= Tff7b72None
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffWebshare server closedTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3webshare_jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffrequest_lxmf_syncTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3limit Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_IDLE Tff7b72or Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72>Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_COMPLETETb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffrequest_messages_from_propagation_nodeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidentityTb4b4b4, Te6edf3max_messages Tff7b72= Te6edf3limitTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffLXMF message sync requested from propagation node Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffget_outbound_propagation_nodeTb4b4b4(Tb4b4b4)Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff for Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidentityTb4b4b4)Tb4b4b4)
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffcancel_lxmf_syncTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72!= Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_IDLETb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffcancel_propagation_node_requestsTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffget_sync_progressTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3state Tff7b72= Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state
Tff7b72if Te6edf3state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_PATH_REQUESTEDTb4b4b4:
Te6edf3state_val Tff7b72= T79c0ff0.05
Tff7b72elif Te6edf3state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_LINK_ESTABLISHINGTb4b4b4:
Te6edf3state_val Tff7b72= T79c0ff0.1
Tff7b72elif Te6edf3state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_LINK_ESTABLISHEDTb4b4b4:
Te6edf3state_val Tff7b72= T79c0ff0.15
Tff7b72elif Te6edf3state Tff7b72>Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_REQUEST_SENTTb4b4b4:
Te6edf3state_val Tff7b72= T79c0ff0.2
Tff7b72elseTb4b4b4:
Te6edf3state_val Tff7b72= T79c0ff0.0
Tff7b72return Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_progressTff7b72*T79c0ff0.8Tb4b4b4)Tff7b72+Te6edf3state_val
Tff7b72def Td2a8fflxmf_deliveryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3messageTb4b4b4)Tb4b4b4:
Te6edf3time_string Tff7b72= Te6edf3timeTff7b72.Td2a8ffstrftimeTb4b4b4(Ta5d6ff"Ta5d6ff%Ta5d6ffY-Ta5d6ff%Ta5d6ffm-Tffd700%dTa5d6ff Ta5d6ff%Ta5d6ffH:Ta5d6ff%Ta5d6ffM:Ta5d6ff%Ta5d6ffSTa5d6ff"Tb4b4b4, Te6edf3timeTff7b72.Td2a8fflocaltimeTb4b4b4(Te6edf3messageTff7b72.Td2a8fftimestampTb4b4b4)Tb4b4b4)
Te6edf3signature_string Tff7b72= Ta5d6ff"Ta5d6ffSignature is invalid, reason undeterminedTa5d6ff"
Tff7b72if Te6edf3messageTff7b72.Td2a8ffsignature_validatedTb4b4b4:
Te6edf3signature_string Tff7b72= Ta5d6ff"Ta5d6ffValidatedTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3messageTff7b72.Td2a8ffunverified_reason Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffSIGNATURE_INVALIDTb4b4b4:
Te6edf3signature_string Tff7b72= Ta5d6ff"Ta5d6ffInvalid signatureTa5d6ff"
Tff7b72if Te6edf3messageTff7b72.Td2a8ffunverified_reason Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMessageTff7b72.Td2a8ffSOURCE_UNKNOWNTb4b4b4:
Te6edf3signature_string Tff7b72= Ta5d6ff"Ta5d6ffCannot verify, source is unknownTa5d6ff"
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffLXMF delivery Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3time_stringTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff. Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3signature_stringTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3context_dest Tff7b72= Te6edf3messageTff7b72.Td2a8ffsource_hash
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_ignore_unknownTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_db_conversationTb4b4b4(Te6edf3context_destTb4b4b4) Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDropping message from unknown sender Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return
Tff7b72if Te6edf3messageTff7b72.Td2a8ffsignature_validated Tff7b72and Te6edf3LXMFTff7b72.Td2a8ffFIELD_COMMANDS Tff7b72in Te6edf3messageTff7b72.Td2a8fffieldsTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffallow_request_fromTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4:
Te6edf3commands Tff7b72= Te6edf3messageTff7b72.Td2a8fffieldsTb4b4b4[Te6edf3LXMFTff7b72.Td2a8ffFIELD_COMMANDSTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffhandle_commandsTb4b4b4(Te6edf3commandsTb4b4b4, Te6edf3messageTb4b4b4)
Tff7b72elseTb4b4b4:
T8b949e# TODO: Add these event to built-in log/event viewer
T8b949e# when it is implemented.
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffUnauthorized command received from Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflxm_ingestTb4b4b4(Te6edf3messageTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while ingesting LXMF message Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3messageTff7b72.Td2a8ffhashTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff to database: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8ffhandle_plugin_commandTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3command_stringTb4b4b4, Te6edf3messageTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3call Tff7b72= Te6edf3shlexTff7b72.Td2a8ffsplitTb4b4b4(Te6edf3command_stringTb4b4b4)
Te6edf3command Tff7b72= Te6edf3callTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3arguments Tff7b72= Te6edf3callTb4b4b4[T79c0ff1Tb4b4b4:Tb4b4b4]
Tff7b72if Te6edf3command Tff7b72in Tff7b72selfTff7b72.Td2a8ffactive_command_pluginsTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffHandling command Tffea00\"Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3commandTb4b4b4)Tff7b72+Ta5d6ff"Tffea00\"Ta5d6ff via command plugin Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffactive_command_pluginsTb4b4b4[Te6edf3commandTb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffactive_command_pluginsTb4b4b4[Te6edf3commandTb4b4b4]Tff7b72.Td2a8ffhandle_commandTb4b4b4(Te6edf3argumentsTb4b4b4, Te6edf3messageTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while handling a plugin command. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72def Td2a8ffhandle_commandsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3commandsTb4b4b4, Te6edf3messageTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3context_dest Tff7b72= Te6edf3messageTff7b72.Td2a8ffsource_hash
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffHandling commands from Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72for Te6edf3command Tff7b72in Te6edf3commandsTb4b4b4:
Tff7b72if Te6edf3CommandsTff7b72.Td2a8ffTELEMETRY_REQUEST Tff7b72in Te6edf3commandTb4b4b4:
Te6edf3timebase Tff7b72= Tffa657intTb4b4b4(Te6edf3commandTb4b4b4[Te6edf3CommandsTff7b72.Td2a8ffTELEMETRY_REQUESTTb4b4b4]Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffHandling telemetry request with timebase Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3timebaseTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_collector_enabledTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCollector requests enabled, returning complete telemetry response for all known objects since Tffd700{Te6edf3timebaseTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcreate_telemetry_collector_responseTb4b4b4(Te6edf3to_addrTff7b72=Te6edf3context_destTb4b4b4, Te6edf3timebaseTff7b72=Te6edf3timebaseTb4b4b4, Te6edf3is_authorized_telemetry_requestTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffResponding with own latest telemetryTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsend_latest_telemetryTb4b4b4(Te6edf3to_addrTff7b72=Te6edf3context_destTb4b4b4)
Tff7b72elif Te6edf3CommandsTff7b72.Td2a8ffPING Tff7b72in Te6edf3commandTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffHandling ping requestTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsend_messageTb4b4b4(Ta5d6ff"Ta5d6ffPing replyTa5d6ff"Tb4b4b4, Te6edf3context_destTb4b4b4, Tff7b72FalseTb4b4b4, Te6edf3skip_fieldsTff7b72=Tff7b72TrueTb4b4b4, Te6edf3no_displayTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72elif Te6edf3CommandsTff7b72.Td2a8ffECHO Tff7b72in Te6edf3commandTb4b4b4:
Te6edf3msg_content Tff7b72= Ta5d6ff"Ta5d6ffEcho reply: Ta5d6ff"Tff7b72+Te6edf3commandTb4b4b4[Te6edf3CommandsTff7b72.Td2a8ffECHOTb4b4b4]Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffHandling echo requestTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsend_messageTb4b4b4(Te6edf3msg_contentTb4b4b4, Te6edf3context_destTb4b4b4, Tff7b72FalseTb4b4b4, Te6edf3skip_fieldsTff7b72=Tff7b72TrueTb4b4b4, Te6edf3no_displayTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72elif Te6edf3CommandsTff7b72.Td2a8ffSIGNAL_REPORT Tff7b72in Te6edf3commandTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffHandling signal reportTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3phy_str Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Te6edf3messageTff7b72.Td2a8ffq Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3phy_str Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffLink Quality: Tffd700{Te6edf3messageTff7b72.Td2a8ffqTffd700}Ta5d6ff%Tffea00\nTa5d6ff"
Tff7b72if Te6edf3messageTff7b72.Td2a8ffrssi Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3phy_str Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffRSSI: Tffd700{Te6edf3messageTff7b72.Td2a8ffrssiTffd700}Ta5d6ff dBmTffea00\nTa5d6ff"
Tff7b72if Te6edf3messageTff7b72.Td2a8ffsnr Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3phy_str Tff7b72+Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffSNR: Tffd700{Te6edf3messageTff7b72.Td2a8ffsnrTffd700}Ta5d6ff dBTffea00\nTa5d6ff"
Tff7b72if Tffa657lenTb4b4b4(Te6edf3phy_strTb4b4b4) Tff7b72!= T79c0ff0Tb4b4b4:
Te6edf3phy_str Tff7b72= Te6edf3phy_strTb4b4b4[Tb4b4b4:Tff7b72-T79c0ff1Tb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3phy_str Tff7b72= Ta5d6ff"Ta5d6ffNo reception info availableTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffsend_messageTb4b4b4(Te6edf3phy_strTb4b4b4, Te6edf3context_destTb4b4b4, Tff7b72FalseTb4b4b4, Te6edf3skip_fieldsTff7b72=Tff7b72TrueTb4b4b4, Te6edf3no_displayTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffcommand_plugins_enabledTa5d6ff"Tb4b4b4] Tff7b72and Te6edf3CommandsTff7b72.Td2a8ffPLUGIN_COMMAND Tff7b72in Te6edf3commandTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhandle_plugin_commandTb4b4b4(Te6edf3commandTb4b4b4[Te6edf3CommandsTff7b72.Td2a8ffPLUGIN_COMMANDTb4b4b4]Tb4b4b4, Te6edf3messageTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while handling commands: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8ffcreate_telemetry_collector_responseTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3to_addrTb4b4b4, Te6edf3timebaseTb4b4b4, Te6edf3is_authorized_telemetry_requestTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fftelemetry.Tffd700{Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3to_addrTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tffd700}Ta5d6ff.update_sendingTa5d6ff"Tb4b4b4) Tff7b72== Tff7b72TrueTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNot sending new telemetry collector response, since an earlier transfer is already in progressTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ffin_progressTa5d6ff"
Te6edf3added_sources Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3sources Tff7b72= Tff7b72selfTff7b72.Td2a8fflist_telemetryTb4b4b4(Te6edf3afterTff7b72=Te6edf3timebaseTb4b4b4)
Te6edf3only_latest Tff7b72= Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_requests_only_send_latestTa5d6ff"Tb4b4b4]
Te6edf3elements Tff7b72= T79c0ff0Tb4b4b4; Te6edf3added Tff7b72= T79c0ff0
Te6edf3telemetry_stream Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3source Tff7b72in Te6edf3sourcesTb4b4b4:
Tff7b72if Te6edf3source Tff7b72!= Te6edf3to_addrTb4b4b4:
Tff7b72for Te6edf3entry Tff7b72in Te6edf3sourcesTb4b4b4[Te6edf3sourceTb4b4b4]Tb4b4b4:
Te6edf3elements Tff7b72+Tff7b72= T79c0ff1
Te6edf3timestamp Tff7b72= Te6edf3entryTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4; Te6edf3packed_telemetry Tff7b72= Te6edf3entryTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3appearance Tff7b72= Tff7b72selfTff7b72.Td2a8ff_db_get_appearanceTb4b4b4(Te6edf3sourceTb4b4b4, Te6edf3rawTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3te Tff7b72= Tb4b4b4[Te6edf3sourceTb4b4b4, Te6edf3timestampTb4b4b4, Te6edf3packed_telemetryTb4b4b4, Te6edf3appearanceTb4b4b4]
Tff7b72if Te6edf3only_latestTb4b4b4:
Tff7b72if Tff7b72not Te6edf3source Tff7b72in Te6edf3added_sourcesTb4b4b4:
Te6edf3added_sourcesTb4b4b4[Te6edf3sourceTb4b4b4] Tff7b72= Tff7b72True
Te6edf3telemetry_streamTff7b72.Td2a8ffappendTb4b4b4(Te6edf3teTb4b4b4)
Te6edf3added Tff7b72+Tff7b72= T79c0ff1
Tff7b72elseTb4b4b4:
Te6edf3telemetry_streamTff7b72.Td2a8ffappendTb4b4b4(Te6edf3teTb4b4b4)
Te6edf3added Tff7b72+Tff7b72= T79c0ff1
Tff7b72if Tffa657lenTb4b4b4(Te6edf3telemetry_streamTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffNo new telemetry for request with timebase Tffd700{Te6edf3timebaseTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ffsend_latest_telemetryTb4b4b4(
Te6edf3to_addrTff7b72=Te6edf3to_addrTb4b4b4,
Te6edf3streamTff7b72=Te6edf3telemetry_streamTb4b4b4,
Te6edf3is_authorized_telemetry_requestTff7b72=Te6edf3is_authorized_telemetry_request
Tb4b4b4)
Tff7b72def Td2a8ffget_display_name_bytesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdisplay_nameTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffget_sync_statusTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_IDLETb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffIdleTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_PATH_REQUESTEDTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffPath requestedTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_LINK_ESTABLISHINGTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffEstablishing linkTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_LINK_ESTABLISHEDTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffLink establishedTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_REQUEST_SENTTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffSync request sentTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_RECEIVINGTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffReceiving messagesTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_RESPONSE_RECEIVEDTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffMessages receivedTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_NO_PATHTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffNo path to propagation nodeTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_LINK_FAILEDTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffLink establisment failedTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_TRANSFER_FAILEDTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffSync request failedTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_NO_IDENTITY_RCVDTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffNo identity received by remoteTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_NO_ACCESSTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffNo access to specified nodeTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_FAILEDTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffSync failedTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_state Tff7b72== Te6edf3LXMFTff7b72.Td2a8ffLXMRouterTff7b72.Td2a8ffPR_COMPLETETb4b4b4:
Te6edf3new_msgs Tff7b72= Tff7b72selfTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffpropagation_transfer_last_result
Tff7b72if Te6edf3new_msgs Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffDone, no new messagesTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffDownloaded Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3new_msgsTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff new messagesTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffUnknownTa5d6ff"
Tff7b72def Td2a8ffcleanupTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffreticulumTff7b72.Td2a8ffis_connected_to_shared_instanceTb4b4b4:
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffdetach_interfacesTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffstart_voiceTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffvoice_runningTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffStarting voice serviceTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffvoice_running Tff7b72= Tff7b72True
Tff7b72from T7ee787.T7ee787voice Tff7b72import Te6edf3ReticulumTelephone
Tff7b72selfTff7b72.Td2a8fftelephone Tff7b72= Te6edf3ReticulumTelephoneTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidentityTb4b4b4, Te6edf3ownerTff7b72=Tff7b72selfTb4b4b4, Te6edf3speakerTff7b72=Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_outputTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3microphoneTff7b72=Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_inputTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3ringerTff7b72=Tff7b72selfTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffvoice_ringerTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3ringtone_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffasset_dirTb4b4b4, Ta5d6ff"Ta5d6ffaudioTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnotificationsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffsoft1.opusTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffset_ringtoneTb4b4b4(Te6edf3ringtone_pathTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffvoice_running Tff7b72= Tff7b72False
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffAn error occurred while starting voice services, the contained exception was: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72def Td2a8ffstop_voiceTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffvoice_runningTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffStopping voice serviceTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8fftelephoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffstopTb4b4b4(Tb4b4b4)
Tff7b72del Tff7b72selfTff7b72.Td2a8fftelephone
Tff7b72selfTff7b72.Td2a8fftelephone Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffvoice_running Tff7b72= Tff7b72False
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffAn error occurred while stopping voice services, the contained exception was: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72def Td2a8ffincoming_callTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3remote_identityTb4b4b4)Tb4b4b4:
Te6edf3display_name Tff7b72= Tff7b72selfTff7b72.Td2a8ffvoice_display_nameTb4b4b4(Te6edf3remote_identityTff7b72.Td2a8ffhashTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffvoice.incoming_callTa5d6ff"Tb4b4b4, Te6edf3display_nameTb4b4b4)
Te6edf3rns_config Tff7b72= Ta5d6ff"""Ta5d6ff# This template is used to generate a
Ta5d6ff# running configuration for SidebandTa5d6ff'Ta5d6ffs
Ta5d6ff# internal RNS instance. Incorrect changes
Ta5d6ff# or addition here may cause Sideband to
Ta5d6ff# fail starting up or working properly.
Ta5d6ff#
Ta5d6ff# If Sideband detects that Reticulum
Ta5d6ff# aborts at startup, due to an error in
Ta5d6ff# configuration, any template changes
Ta5d6ff# will be reset to this default.
Ta5d6ff[reticulum]
Ta5d6ff # DonTa5d6ff'Ta5d6fft change this line, use the UI
Ta5d6ff # setting for selecting whether RNS
Ta5d6ff # transport is enabled or disabled
Ta5d6ff enable_transport = TRANSPORT_IS_ENABLED
Ta5d6ff # Changing this setting will cause
Ta5d6ff # Sideband to not work.
Ta5d6ff share_instance = Yes
Ta5d6ff # Changing these options should only
Ta5d6ff # be done if you know what youTa5d6ff'Ta5d6ffre doing.
Ta5d6ff shared_instance_port = 37428
Ta5d6ff instance_control_port = 37429
Ta5d6ff panic_on_interface_error = No
Ta5d6ff# Logging is controlled by settings
Ta5d6ff# in the UI, so this section is mostly
Ta5d6ff# not relevant in Sideband.
Ta5d6ff[logging]
Ta5d6ff loglevel = 3
Ta5d6ff# No additional interfaces are currently
Ta5d6ff# defined, but you can use this section
Ta5d6ff# to add additional custom interfaces.
Ta5d6ff[interfaces]
Ta5d6ff"""
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────